本文档记录了 sa-token-rust 项目的未来发展方向和改进计划。
现状: 缺少系统的测试覆盖
改进目标:
- ✅ 为
sa-token-core添加单元测试(覆盖率 >80%) - ✅ 为每个
storage实现添加集成测试 - ✅ 为每个
plugin添加端到端测试 - ✅ 添加 benchmark 性能测试
示例结构:
sa-token-core/
├── src/
└── tests/
├── unit/
│ ├── token_test.rs
│ ├── session_test.rs
│ └── permission_test.rs
└── integration/
└── manager_test.rs
预计工作量: 1-2 周
现状: Token 生成较简单,缺少高级安全特性
改进目标:
- ✅ 实现 JWT 完整支持(签名验证)
- ✅ 支持 Token 加密存储
- ✅ 添加 Token 签名算法选择(HS256, RS256, ES256)
- ✅ 防止 Token 重放攻击(nonce/timestamp)
- ✅ 实现 Token 刷新机制(refresh token)
技术方案:
// JWT 签名支持
pub enum JwtAlgorithm {
HS256, // HMAC-SHA256
RS256, // RSA-SHA256
ES256, // ECDSA-SHA256
}
// Token 配置
pub struct TokenConfig {
algorithm: JwtAlgorithm,
secret: String,
issuer: String,
audience: Vec<String>,
enable_refresh: bool,
}预计工作量: 2-3 周
现状: sa-token-storage-database 是占位符
改进目标:
- ✅ 实现 PostgreSQL 支持(使用 sqlx)
- ✅ 实现 MySQL 支持
- ✅ 实现 SQLite 支持
- ✅ 添加数据库迁移脚本
- ✅ 支持连接池配置
数据库表设计:
-- Tokens 表
CREATE TABLE sa_tokens (
id BIGSERIAL PRIMARY KEY,
token_value VARCHAR(512) NOT NULL UNIQUE,
login_id VARCHAR(256) NOT NULL,
device VARCHAR(128),
created_at TIMESTAMP NOT NULL,
expires_at TIMESTAMP,
INDEX idx_login_id (login_id),
INDEX idx_token_value (token_value)
);
-- Sessions 表
CREATE TABLE sa_sessions (
id BIGSERIAL PRIMARY KEY,
session_id VARCHAR(256) NOT NULL UNIQUE,
login_id VARCHAR(256) NOT NULL,
data JSONB,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
expires_at TIMESTAMP,
INDEX idx_login_id (login_id)
);
-- Permissions 表
CREATE TABLE sa_permissions (
id BIGSERIAL PRIMARY KEY,
login_id VARCHAR(256) NOT NULL,
permission VARCHAR(256) NOT NULL,
created_at TIMESTAMP NOT NULL,
INDEX idx_login_id (login_id),
UNIQUE (login_id, permission)
);
-- Roles 表
CREATE TABLE sa_roles (
id BIGSERIAL PRIMARY KEY,
login_id VARCHAR(256) NOT NULL,
role VARCHAR(128) NOT NULL,
created_at TIMESTAMP NOT NULL,
INDEX idx_login_id (login_id),
UNIQUE (login_id, role)
);预计工作量: 2-3 周
现状: 基础的并发登录控制
改进目标:
- ✅ 实现"后来居上"策略(踢掉旧会话)
- ✅ 实现"先来后到"策略(拒绝新登录)
- ✅ 实现"共享会话"策略
- ✅ 支持设备管理(记录登录设备信息)
- ✅ 实现会话列表查询
API 设计:
pub enum KickStrategy {
/// 后来居上 - 踢掉旧会话
KickOld,
/// 先来后到 - 拒绝新登录
RejectNew,
/// 共享会话
Share,
/// 设备独立
PerDevice { max_devices: u32 },
}
// 使用示例
let config = SaTokenConfig::builder()
.kick_strategy(KickStrategy::KickOld)
.build();预计工作量: 1-2 周
现状: 未实现
改进目标:
- ✅ 实现 SSO Client 端
- ✅ 实现 SSO Server 端
- ✅ 支持跨域登录
- ✅ 支持票据(Ticket)验证
- ✅ 实现统一登出
架构设计:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ App A │ │ SSO Server │ │ App B │
│ │ │ │ │ │
│ ┌───────┐ │ │ ┌───────┐ │ │ ┌───────┐ │
│ │Client │◄─┼──────┼─►│Server │◄─┼──────┼─►│Client │ │
│ └───────┘ │ │ └───────┘ │ │ └───────┘ │
└─────────────┘ └─────────────┘ └─────────────┘
▲ ▲ ▲
│ │ │
└─────────────────────┴─────────────────────┘
Ticket 验证流程
预计工作量: 3-4 周
改进目标:
- ✅ 实现 OAuth2 授权码模式
- ✅ 实现客户端凭证模式
- ✅ 实现密码模式
- ✅ 支持第三方登录(GitHub, Google, etc.)
- ✅ 实现 PKCE 扩展
预计工作量: 3-4 周
改进目标:
- ✅ 集成 tracing 完整日志
- ✅ 添加 metrics 指标(登录次数、失败次数等)
- ✅ 支持 Prometheus 导出
- ✅ 添加审计日志(登录/登出/权限变更)
- ✅ 实现异常告警机制
Metrics 示例:
// 登录成功次数
sa_token_login_success_total{framework="axum"} 1234
// 登录失败次数
sa_token_login_failure_total{reason="invalid_password"} 56
// Token 验证次数
sa_token_validation_total{result="success"} 98765
// 当前在线用户数
sa_token_online_users{} 128预计工作量: 2 周
改进目标:
- ✅ 实现多级缓存(本地 + Redis)
- ✅ 添加权限缓存策略
- ✅ 实现缓存预热
- ✅ 支持缓存失效策略
- ✅ 添加缓存命中率统计
架构:
┌──────────────────────────────────────┐
│ L1 Cache (Local Memory) │
│ - LRU 淘汰策略 │
│ - 容量限制:1000 条 │
│ - TTL:60 秒 │
└──────────────┬───────────────────────┘
│ Cache Miss
▼
┌──────────────────────────────────────┐
│ L2 Cache (Redis) │
│ - 持久化存储 │
│ - 分布式共享 │
│ - TTL:3600 秒 │
└──────────────┬───────────────────────┘
│ Cache Miss
▼
┌──────────────────────────────────────┐
│ Database / Primary Storage │
└──────────────────────────────────────┘
预计工作量: 2 周
改进目标:
- ✅ 实现 IP 级别限流
- ✅ 实现账号级别限流
- ✅ 添加验证码集成
- ✅ 实现账号锁定机制
- ✅ 支持黑白名单
限流策略:
pub struct RateLimitConfig {
// IP 限流:每分钟最多 10 次登录尝试
ip_limit: RateLimit {
max_attempts: 10,
window: Duration::from_secs(60),
},
// 账号限流:每小时最多 20 次失败
account_limit: RateLimit {
max_attempts: 20,
window: Duration::from_secs(3600),
},
// 连续失败锁定:5 次失败后锁定 30 分钟
lockout: LockoutConfig {
max_failures: 5,
lockout_duration: Duration::from_secs(1800),
},
}预计工作量: 1-2 周
改进目标:
- ✅ 支持 Session 数据持久化
- ✅ 实现 Session 共享(分布式)
- ✅ 添加 Session 监听器
- ✅ 支持 Session 过期回调
- ✅ 实现 Session 统计分析
监听器示例:
pub trait SessionListener: Send + Sync {
async fn on_created(&self, session: &Session);
async fn on_updated(&self, session: &Session);
async fn on_expired(&self, session: &Session);
async fn on_destroyed(&self, session: &Session);
}
// 使用示例
struct AuditListener;
impl SessionListener for AuditListener {
async fn on_created(&self, session: &Session) {
log::info!("Session created: {}", session.id());
}
async fn on_expired(&self, session: &Session) {
log::warn!("Session expired: {}", session.id());
}
}预计工作量: 1-2 周
改进目标:
- ✅ 添加完整的 API 文档(docs.rs)
- ✅ 创建更多实战示例
- ✅ 编写最佳实践指南
- ✅ 添加常见问题 FAQ
- ✅ 制作视频教程
- ✅ 翻译多语言文档(英文为主)
文档结构:
docs/
├── api/ # API 文档
│ ├── core.md
│ ├── storage.md
│ └── plugins.md
├── guides/ # 使用指南
│ ├── getting-started.md
│ ├── authentication.md
│ ├── authorization.md
│ └── best-practices.md
├── examples/ # 实战示例
│ ├── rest-api.md
│ ├── microservices.md
│ ├── sso.md
│ └── oauth2.md
├── faq.md # 常见问题
└── tutorials/ # 视频教程
└── README.md
预计工作量: 持续进行
改进目标:
- ✅ 创建
sa-token-cli工具 - ✅ 支持 Token 生成/验证
- ✅ 支持配置文件生成
- ✅ 支持数据库迁移命令
- ✅ 支持性能测试命令
CLI 命令示例:
# 生成 Token
sa-token generate --login-id user123 --expires 7200
# 验证 Token
sa-token verify --token "xxx" --config ./config.toml
# 初始化配置
sa-token init --framework axum --storage redis
# 数据库迁移
sa-token migrate --database postgres://localhost/satoken
# 性能测试
sa-token bench --requests 10000 --concurrency 100预计工作量: 2 周
改进目标:
- ✅ 开发 Web 管理界面
- ✅ 实现用户管理
- ✅ 实现权限管理
- ✅ 实现会话监控
- ✅ 实现日志查看
功能模块:
Web Admin Panel
├── Dashboard # 仪表盘
│ ├── 在线用户统计
│ ├── 登录趋势图
│ └── 系统健康状态
├── User Management # 用户管理
│ ├── 用户列表
│ ├── 权限分配
│ └── 角色管理
├── Session Monitor # 会话监控
│ ├── 活跃会话
│ ├── 设备管理
│ └── 强制下线
├── Audit Logs # 审计日志
│ ├── 登录日志
│ ├── 操作日志
│ └── 异常日志
└── Configuration # 配置管理
├── Token 配置
├── 安全策略
└── 限流规则
技术栈: Leptos / Yew + Tailwind CSS
预计工作量: 4-6 周
改进目标:
- ✅ 提供 cargo-generate 模板
- ✅ 创建微服务模板
- ✅ 创建单体应用模板
- ✅ 创建 API 网关模板
- ✅ 提供 Docker 部署模板
模板列表:
# 创建微服务项目
cargo generate --git https://github.com/sa-token-rust/template-microservice
# 创建单体应用
cargo generate --git https://github.com/sa-token-rust/template-monolith
# 创建 API 网关
cargo generate --git https://github.com/sa-token-rust/template-gateway预计工作量: 2-3 周
改进目标:
- ✅ 支持 Salvo 框架
- ✅ 支持 Tide 框架
- ✅ 支持 Gotham 框架
- ✅ 支持 ntex 框架
- ✅ 提供通用适配器
预计工作量: 每个框架 1 周
改进目标:
- ✅ CORS 中间件集成
- ✅ 日志中间件集成
- ✅ 限流中间件集成
- ✅ 压缩中间件集成
- ✅ 链路追踪集成(OpenTelemetry)
预计工作量: 2-3 周
改进目标:
- ✅ 集成 SeaORM
- ✅ 集成 Diesel
- ✅ 集成 sqlx
- ✅ 提供数据模型示例
- ✅ 支持自动建表
预计工作量: 2-3 周
改进目标:
- ✅ 支持 Redis Pub/Sub
- ✅ 支持 RabbitMQ
- ✅ 支持 Kafka
- ✅ 实现登录/登出事件通知
- ✅ 实现权限变更通知
事件系统:
pub enum SaTokenEvent {
Login { login_id: String, timestamp: i64 },
Logout { login_id: String, timestamp: i64 },
PermissionChanged { login_id: String, permissions: Vec<String> },
RoleChanged { login_id: String, roles: Vec<String> },
SessionExpired { session_id: String },
}预计工作量: 2 周
改进目标:
- ✅ 配置 GitHub Actions
- ✅ 添加自动化测试
- ✅ 添加代码覆盖率检查
- ✅ 配置自动发布到 crates.io
- ✅ 添加安全扫描(cargo-audit)
CI Pipeline:
name: CI
on: [push, pull_request]
jobs:
test:
- cargo fmt --check
- cargo clippy -- -D warnings
- cargo test --all-features
- cargo tarpaulin --out Xml
security:
- cargo audit
- cargo deny check
publish:
- cargo publish --dry-run预计工作量: 1 周
改进目标:
- ✅ 配置 clippy(严格模式)
- ✅ 配置 rustfmt
- ✅ 添加 pre-commit hooks
- ✅ 配置 cargo-deny
- ✅ 添加 API 兼容性检查
预计工作量: 3-5 天
改进目标:
- ✅ 使用 criterion.rs
- ✅ 添加吞吐量测试
- ✅ 添加延迟测试
- ✅ 添加内存使用测试
- ✅ 对比其他框架性能
Benchmark 示例:
fn bench_login(c: &mut Criterion) {
c.bench_function("login", |b| {
b.iter(|| {
StpUtil::login("user123").await
})
});
}
fn bench_check_permission(c: &mut Criterion) {
c.bench_function("check_permission", |b| {
b.iter(|| {
StpUtil::check_permission("user123", "user:list").await
})
});
}预计工作量: 1-2 周
改进目标:
- ✅ 实现服务间认证
- ✅ 支持 JWT 令牌传递
- ✅ 实现 API 网关集成
- ✅ 支持服务发现集成
- ✅ 实现分布式 Session
预计工作量: 3-4 周
改进目标:
- ✅ 支持 WebSocket 认证
- ✅ 实现在线用户推送
- ✅ 实现强制下线通知
- ✅ 支持消息加密
- ✅ 实现心跳检测
预计工作量: 2-3 周
改进目标:
- ✅ 集成 async-graphql
- ✅ 实现 GraphQL 中间件
- ✅ 支持字段级权限控制
- ✅ 提供完整示例
- ✅ 实现订阅(Subscription)认证
预计工作量: 2-3 周
改进目标:
- ✅ 集成 tonic
- ✅ 实现 gRPC 拦截器
- ✅ 支持 Metadata 传递
- ✅ 提供完整示例
- ✅ 支持双向流认证
预计工作量: 2 周
改进目标:
- ✅ 实现 RBAC 完整模型
- ✅ 实现 ABAC(属性访问控制)
- ✅ 支持权限继承
- ✅ 支持动态权限
- ✅ 实现权限表达式引擎
ABAC 示例:
// 基于属性的访问控制
pub struct AccessPolicy {
subject: Subject, // 主体属性(用户)
resource: Resource, // 资源属性(文档)
action: Action, // 操作(读/写)
environment: Env, // 环境属性(时间/IP)
}
// 策略规则
impl AccessPolicy {
fn evaluate(&self) -> bool {
self.subject.department == self.resource.owner_department
&& self.action == Action::Read
&& self.environment.time.is_business_hours()
}
}预计工作量: 3-4 周
重点任务:
- ✅ 添加完整的单元测试(覆盖率 >80%)
- ✅ 实现 JWT 完整支持
- ✅ 实现数据库存储(PostgreSQL + MySQL)
- ✅ 添加集成测试和 CI/CD
- ✅ 完善 API 文档
预计工作量: 2-3 周
发布标准:
- 测试覆盖率 >80%
- 所有核心功能有文档
- CI/CD 配置完成
- 至少 2 个数据库存储实现
重点任务:
- ✅ 实现 SSO 单点登录
- ✅ 添加多账号互踢策略
- ✅ 实现登录限流和防暴力破解
- ✅ 添加监控和日志系统
- ✅ 实现 OAuth2 支持
预计工作量: 3-4 周
发布标准:
- SSO 完整实现并有示例
- 限流和防护机制完善
- Prometheus metrics 集成
- OAuth2 授权码模式实现
重点任务:
- ✅ 开发 Web 管理后台
- ✅ 提供项目模板
- ✅ 集成更多框架(Salvo, Tide)
- ✅ 实现微服务支持
- ✅ 添加 CLI 工具
预计工作量: 4-6 周
发布标准:
- Web 管理后台可用
- 至少 3 个项目模板
- 支持 7+ 个 Web 框架
- CLI 工具功能完整
重点任务:
- ✅ 完整的性能测试和优化
- ✅ 安全审计和渗透测试
- ✅ 完善的文档和教程
- ✅ 社区建设和推广
- ✅ 长期维护计划
预计工作量: 2-3 个月
发布标准:
- 性能达到生产级别
- 通过安全审计
- 文档覆盖所有功能
- 有活跃的社区支持
- 至少 10 个生产环境案例
以下改进可以在 1 周内完成,并能显著提升项目质量:
- 工作量: 1-2 天
- 收益: 代码质量保证
- 难度: ⭐⭐
- 工作量: 2-3 天
- 收益: 用户体验提升
- 难度: ⭐
- 工作量: 2-3 天
- 收益: 易用性提升
- 难度: ⭐
- 工作量: 1 天
- 收益: 质量保证
- 难度: ⭐
- 工作量: 1-2 天
- 收益: 性能可见性
- 难度: ⭐⭐
优势 ✅
- 核心功能完整
- 支持 5 大主流框架(Axum, Actix-web, Poem, Rocket, Warp)
- 基础文档完善
- 可用于小型项目
待改进
- 缺少系统测试
- 安全性需增强
- 生产特性不足
- 生态系统待建设
- 完善测试覆盖
- 增强安全性
- 实现数据库存储
- 优化文档
- 生产级别稳定性
- 完整的功能生态
- 活跃的社区
- 企业级支持
🔴 最高优先级: 测试 > 安全 > 存储 > 文档
🟡 中等优先级: SSO > OAuth2 > 监控 > 性能
🟢 低优先级: 生态 > 工具 > 创新功能
如果您对以上任何功能感兴趣,欢迎:
- 提交 Issue 讨论实现方案
- 提交 Pull Request 贡献代码
- 加入讨论组参与设计
- 分享使用经验和反馈
本文档遵循与项目相同的许可证:MIT OR Apache-2.0
金书记
最后更新: 2025-01-13
This document outlines the future development roadmap and improvement plans for the sa-token-rust project.
Current Status: Lacks systematic test coverage
Goals:
- ✅ Add unit tests for
sa-token-core(coverage >80%) - ✅ Add integration tests for each storage implementation
- ✅ Add end-to-end tests for each plugin
- ✅ Add benchmark performance tests
Estimated Effort: 1-2 weeks
Current Status: Simple token generation, lacking advanced security features
Goals:
- ✅ Implement full JWT support (signature verification)
- ✅ Support encrypted token storage
- ✅ Add token signing algorithm options (HS256, RS256, ES256)
- ✅ Prevent token replay attacks (nonce/timestamp)
- ✅ Implement token refresh mechanism (refresh token)
Estimated Effort: 2-3 weeks
Current Status: sa-token-storage-database is a placeholder
Goals:
- ✅ Implement PostgreSQL support (using sqlx)
- ✅ Implement MySQL support
- ✅ Implement SQLite support
- ✅ Add database migration scripts
- ✅ Support connection pool configuration
Estimated Effort: 2-3 weeks
Current Status: Basic concurrent login control
Goals:
- ✅ Implement "Last In First Out" strategy (kick old sessions)
- ✅ Implement "First Come First Serve" strategy (reject new logins)
- ✅ Implement "Shared Session" strategy
- ✅ Support device management (record login device info)
- ✅ Implement session list query
Estimated Effort: 1-2 weeks
Current Status: Not implemented
Goals:
- ✅ Implement SSO Client
- ✅ Implement SSO Server
- ✅ Support cross-domain login
- ✅ Support ticket validation
- ✅ Implement unified logout
Estimated Effort: 3-4 weeks
(Full details same as Chinese version)
(Full details same as Chinese version)
(Full details same as Chinese version)
(Full details same as Chinese version)
(Full details same as Chinese version)
- v0.2.0 (1 month): Core improvements
- v0.3.0 (2-3 months): Feature enhancements
- v0.4.0 (4-6 months): Ecosystem building
- v1.0.0 (1 year): Production ready
- Add basic unit tests (1-2 days)
- Improve API documentation (2-3 days)
- Add more examples (2-3 days)
- Configure CI/CD (1 day)
- Add benchmarks (1-2 days)
Current Status:
- ✅ Core features complete
- ✅ 5 major framework support
- ✅ Basic documentation
- ✅ Suitable for small projects
To Improve:
⚠️ Lacks systematic testing⚠️ Security needs enhancement⚠️ Production features insufficient⚠️ Ecosystem needs development
Recommended Priority:
🔴 Testing > Security > Storage > Documentation
🟡 SSO > OAuth2 > Monitoring > Performance
🟢 Ecosystem > Tools > Innovation
Author: 金书记
Last Updated: 2025-01-13