号外!Sa-Token-Rust 入驻开放原子开源基金会·旋武社区!

号外!Sa-Token-Rust 入驻开放原子开源基金会·旋武社区!

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 正式入驻 开放原子开源基金会·旋武社区

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 旋武社区项目详情页

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 / userlogin_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 框架无关。
  • 适配层SaStorageSaRequest / 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-websa-token-plugin-poemsa-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 都欢迎大家来砸。

写 Rust、或打算把鉴权迁到 Rust 的同学,扫码进群:

sa-token-rust 微信交流群

← 太强了!Sa-Token 的 NodeJS 版本!

当前博客已开放版权,所有人均可免费转载,无需联系 Sa-Token 团队获取授权。只需要在转载时保留底部 Sa-Token 官网链接 + 开源仓库链接即可。

Copyright ©2026 Sa-Token java 权限认证 | sa-token.com | 鲁ICP备18046274号-5 | 鲁公网安备37011202002956号