docs: 添加鉴权体系设计文档,更新认证相关文档

- 新增 12-鉴权体系设计.md,详细描述 JWT 双 token 轮转认证机制
- 更新架构设计文档,补充认证设计章节的安全机制和配置说明
- 更新接口文档,补充 Refresh Token Rotation 安全机制和前端集成示例
- 更新文档索引,添加新文档的推荐阅读顺序
This commit is contained in:
hhs
2026-06-20 16:51:03 +08:00
parent 3572b867c0
commit 4ff8cec312
4 changed files with 658 additions and 5 deletions

View File

@@ -376,6 +376,19 @@ TieredManager
## 认证设计
采用 **JWT 双 token 轮转认证机制**,结合 bcrypt 密码哈希和 Refresh Token Rotation 安全策略。详细设计见 [鉴权体系设计](./12-鉴权体系设计.md)。
### 核心组件
| 组件 | 职责 |
|------|------|
| TokenManager | JWT 生成与验证HS256 算法) |
| AuthService | 认证业务逻辑(注册/登录/刷新/登出) |
| AuthMiddleware | Gin 中间件,校验 access_token 并注入用户信息 |
| PasswordUtil | bcrypt 密码哈希cost=10 |
### 认证流程
```mermaid
sequenceDiagram
participant C as 客户端
@@ -408,9 +421,45 @@ sequenceDiagram
G-->>C: {access_token, refresh_token}
```
**Token 策略**access_token 15 分钟有效refresh_token 7 天有效。refresh 时旧 token 失效(轮转),防止重放攻击。
### Token 策略
**WebSocket 认证**:连接地址 `ws://host/ws?token=<access_token>&conversation_id=<uuid>`。HTTP Upgrade 前校验 token失败返回 401。
- **access_token**15 分钟有效,用于 API 认证和 WebSocket 连接
- **refresh_token**7 天有效,用于刷新 access_token
- **Refresh Token Rotation**:每次 refresh 都生成新的 token pair旧 refresh_token 立即失效
- **复用检测**:检测到已删除的 refresh_token 被复用时,吊销该用户的所有 refresh_token
### 安全机制
1. **密码安全**bcrypt 算法cost=10自动生成盐值防彩虹表攻击
2. **Token 安全**
- access_token 短有效期15 分钟),降低泄露风险
- refresh_token 使用 SHA256 哈希存储,不存储原始 token
- Refresh Token Rotation 防重放攻击
- 复用检测 + 自动吊销机制
3. **传输安全**HTTPS 强制CORS 限制HttpOnly Cookie 存储 refresh_token
4. **防攻击策略**
- 防暴力破解:可选速率限制
- 防枚举攻击:统一错误信息
- 防 Token 泄露:复用检测 + 自动吊销
### WebSocket 认证
连接地址:`ws://host/ws?token=<access_token>&conversation_id=<uuid>`
- HTTP Upgrade 前校验 token
- 校验失败返回 401 Unauthorized
- 校验成功后user_id 和 username 注入到连接上下文
### 配置
```yaml
auth:
jwt_secret: "" # JWT 签名密钥(必须通过 CAMTALK_AUTH_JWT_SECRET 环境变量设置)
access_ttl: 15 # access_token 有效期(分钟)
refresh_ttl: 10080 # refresh_token 有效期分钟7天
```
> **安全要求**`JWT_SECRET` **必须**通过环境变量设置,不能写入配置文件。生产环境使用 `openssl rand -hex 32` 生成随机密钥。
## 部署架构