Sa-Token-Rust 是 Sa-Token 社区推动的一个项目:把 Java 生态里那套「登录认证、权限认证、Session、SSO、OAuth2」的用法,搬到 Rust 里。API 贴近原版 StpUtil,同时适配 Axum、Actix-web、Poem、Rocket、Warp、Salvo 等主流 Web 框架。
开源地址:https://github.com/sa-tokens/sa-token-rust
2026-8-18,Sa-Token-Rust 正式入驻 开放原子开源基金会·旋武社区!

开放原子开源基金会 · 旋武社区
开放原子开源基金会 · 旋武社区 是基金会旗下的 Rust 中国社区:有章程、有例会、有工作组,华为、统信、360、中科院软件所、深开鸿、麒麟软件、OPPO、vivo、京东 9 家会员单位共建。发行版、在线课程、Playground、高校走进、开源生态大会上的 Rust 论坛,都是这条线上的活。
名录里目前挂着 60+ 个项目,覆盖基础库、AI、鸿蒙生态、认证授权等。sa-token-rust 进的是「应用框架与软件 / 认证授权」——对社区来说,等于把项目放到了国内 Rust 官方展台上。
项目详情页:https://xuanwu.openatom.org/articles/project/sa-token-rust/

sa-token-rust 是干什么的?
一个轻量级、高性能的 Rust 认证授权框架,灵感来自 Sa-Token。当前版本 0.1.18。
Java 同学可以把它理解成:熟悉的 StpUtil.login() / checkLogin() / 注解鉴权,换成 Rust 的过程宏和 async/await。Rust 同学可以把它理解成:不必从零拼 JWT + Session + 权限模型,一套 crate 覆盖登录到 SSO。
特性
- 🚀 多框架支持:Axum、Actix-web、Poem、Rocket、Warp、Salvo、Tide、Gotham、Ntex
- 🔐 完整认证:登录、登出、Token 验证、Session 管理
- 🛡️ 细粒度授权:权限 + 角色访问控制
- 💾 灵活存储:内存、Redis、数据库后端
- 🎯 易于使用:过程宏 +
StpUtil工具类 - ⚡ 高性能:零拷贝设计,支持 async/await
- 🔧 高度可配置:Token 超时、Cookie、自定义 Token 名称
- 🎧 事件监听:登录、登出、踢人下线等
- 🔑 JWT:多种算法
- 🔒 安全特性:Nonce 防重放、Refresh Token
- 🌐 OAuth2:授权码模式
- 🌐 WebSocket 认证:多种 Token 来源
- 👥 在线用户管理:实时状态跟踪与消息推送
- 🔄 分布式 Session:跨服务共享,适合微服务
- 🎫 SSO:票据认证 + 统一登出
- 👤 多账号体系:通过
SaLogic隔离admin/user等login_type - 📱 多设备终端:
SaTerminalInfo按设备记录、按类型查询
架构
分层很干净:核心不绑框架,插件层对接 Web,存储层可替换。
sa-token-rust/
├── sa-token-core/ # Token、Session、Manager、JWT、OAuth2、SSO…
├── sa-token-adapter/ # 存储 / 请求 / 响应抽象
├── sa-token-macro/ # #[sa_check_login] 等过程宏
├── sa-token-storage-memory/ # 内存存储
├── sa-token-storage-redis/ # Redis 存储
├── sa-token-plugin-axum/ # 各 Web 框架插件
├── sa-token-plugin-actix-web/
├── …(poem / rocket / warp / salvo / tide / gotham / ntex)
└── examples/ # JWT、OAuth2、SSO、WebSocket 等示例- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 核心层:认证授权逻辑,和具体 Web 框架无关。
- 适配层:
SaStorage、SaRequest/SaResponse,核心只认接口。 - 插件层:各框架的中间件、提取器,对外 API 尽量统一。
- 存储层:内存 / Redis / 数据库,按场景选。
- 工具层:过程宏,声明式鉴权。
快速开始(Axum)
一个依赖即可,核心、宏、存储都从插件 crate 再导出:
[dependencies]
sa-token-plugin-axum = "0.1.18" # 默认内存存储
tokio = { version = "1", features = ["full"] }
axum = "0.8"- 1
- 2
- 3
- 4
生产环境改 Redis:
sa-token-plugin-axum = { version = "0.1.18", features = ["redis"] }- 1
初始化 + 登录 + 鉴权:
use sa_token_plugin_axum::*;
use std::sync::Arc;
#[tokio::main]
async fn main() {
let state = SaTokenState::builder()
.storage(Arc::new(MemoryStorage::new()))
.token_name("Authorization")
.timeout(86400) // 24 小时
.build();
// 登录
let token = StpUtil::login("user_id_10001").await.unwrap();
println!("Token: {}", token.value());
StpUtil::set_permissions(
"user_id_10001",
vec!["user:list".to_string(), "user:add".to_string()],
).await.ok();
StpUtil::set_roles("user_id_10001", vec!["admin".to_string()]).await.ok();
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
过程宏和 Java 原版注解是同一套思路:
use sa_token_macro::*;
#[sa_check_login]
async fn protected_route() -> &'static str {
"此路由需要登录"
}
#[sa_check_permission("user:delete")]
async fn delete_user(user_id: String) -> &'static str {
"用户已删除"
}
#[sa_check_role("admin")]
async fn admin_only() -> &'static str {
"仅管理员可见内容"
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
Axum 路由里挂中间件,用提取器拿当前登录 id:
use axum::{Router, routing::get};
use sa_token_plugin_axum::{SaTokenMiddleware, LoginIdExtractor};
async fn user_info(LoginIdExtractor(login_id): LoginIdExtractor) -> String {
format!("当前用户: {}", login_id)
}
let app = Router::new()
.route("/user/info", get(user_info))
.layer(SaTokenMiddleware::new(state));- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
其它框架换对应插件即可:sa-token-plugin-actix-web、sa-token-plugin-poem、sa-token-plugin-rocket……一行 use sa_token_plugin_xxx::*;。
更完整的 JWT、OAuth2、SSO、分布式 Session、多账号 / 多设备说明,直接看仓库 README 和 docs/。
写在最后
Sa-Token 从 Java 走到今天,社区里一直有人把同一套鉴权思路带到别的语言。Sa-Token-Rust 是其中完成度比较高的一条线:框架覆盖面、SSO / OAuth2 / JWT、存储抽象,都已经能上手。
这次入驻旋武,不是换个 logo,而是把项目放到国内 Rust 官方社区的展台上。后续文档、示例、issue 都欢迎大家来砸。
- GitHub:https://github.com/sa-tokens/sa-token-rust
- Gitee:https://gitee.com/sa-tokens/sa-token-rust
- AtomGit:https://atomgit.com/sa-tokens/sa-token-rust
- 旋武项目页:https://xuanwu.openatom.org/articles/project/sa-token-rust/
- 旋武社区:https://xuanwu.openatom.org/
- 开放原子开源基金会:https://www.openatom.org/
写 Rust、或打算把鉴权迁到 Rust 的同学,扫码进群:


鲁公网安备37011202002956号