docs: 添加鉴权体系设计文档,更新认证相关文档
- 新增 12-鉴权体系设计.md,详细描述 JWT 双 token 轮转认证机制 - 更新架构设计文档,补充认证设计章节的安全机制和配置说明 - 更新接口文档,补充 Refresh Token Rotation 安全机制和前端集成示例 - 更新文档索引,添加新文档的推荐阅读顺序
This commit is contained in:
@@ -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` 生成随机密钥。
|
||||
|
||||
## 部署架构
|
||||
|
||||
|
||||
Reference in New Issue
Block a user