JWT 服务认证
概述
Zeus 采用双层认证架构:- 用户认证: Better Auth (Session-based) — 详见 Web 认证
- 服务认证: JWT + JWKS (Stateless)
认证架构
为什么需要双层认证
只有用户认证的问题:JWT 工作原理
Token 获取流程
- 用户登录 → Better Auth 创建 Session
- 调用
/api/auth/token→ Better Auth 签发 JWT - Web API 使用 JWT → 调用 ai-backend
- ai-backend 验证 JWT → 通过 JWKS 验证签名
Token 结构
JWKS 验证流程
- 提取 Token:从
Authorization: Bearer <token>头部提取 - 获取 JWKS:从
/api/auth/jwks获取公钥(带缓存) - 查找密钥:根据 Token Header 中的
kid查找对应公钥 - 验证签名:使用公钥验证 Token 未被篡改
- 检查过期:验证 Token 未过期
- 返回用户信息:提取
userId,email,name
受保护的 API
需要 JWT 认证
| 模块 | 接口 | 说明 |
|---|---|---|
| Chat | /api/agent/invoke | Agent 模式 |
| Sandbox | /api/sandbox/* | 沙盒操作 |
| MCP | /api/mcp/* | MCP 管理 |
| Skills | /api/skills/* | Skills 管理 |
不需要 JWT 认证
| 接口 | 说明 |
|---|---|
/ | 根路径 |
/health | 健康检查 |
安全最佳实践
1. 非对称加密
使用 EdDSA (Ed25519):- 后端无需共享密钥
- 私钥只在 Web 端
- 支持密钥轮换
2. 密钥轮换
- 轮换周期:30 天
- 旧密钥保留:30 天
3. Token 有效期
当前设置:30 天4. JWKS 缓存
- 缓存时间:1 小时
- 密钥轮换时自动刷新
5. 传输安全
- 生产环境必须使用 HTTPS
- Token 只在 HTTP Header 中传输
- 不要在 URL 中传递 Token