29 lines
1.1 KiB
Markdown
29 lines
1.1 KiB
Markdown
# DV-0001:认证与会话 – 设计(Design)
|
||
|
||
## 上下文
|
||
涉及 `auth.py`(API)、`security.py`(JWT/bcrypt)、`deps.py`(依赖注入)、`redis_client.py`(TokenCache)。
|
||
|
||
## 数据模型
|
||
- `users`(id/username/password_hash/…)——细节见 DATABASE.md。
|
||
|
||
## 接口设计
|
||
- POST /api/v1/auth/{register,login,logout}
|
||
- GET /api/v1/auth/me
|
||
- PUT /api/v1/auth/profile
|
||
- POST /api/v1/auth/change-password
|
||
- POST /api/v1/auth/upload-avatar
|
||
- GET /api/v1/auth/avatar/{user_id}/{filename}
|
||
- GET/POST /api/v1/auth/mcp-credentials{,/rotate-secret}
|
||
|
||
## 认证流程
|
||
1. 登录成功:bcrypt 校验 → 生成 JWT(sub=user_id)→ 写入 Redis TokenCache。
|
||
2. 每次请求:`get_current_user` 校验 Redis 中 token→user_id,再 decode JWT,两项一致且用户启用才放行。
|
||
3. 登出:移除 Redis 中的 token,实现即时失效。
|
||
|
||
## 状态与降级
|
||
- Redis 不可用 → 认证失败(受 NFR-2 约束);可选认证(`get_current_user_optional`)返回 None 而非报错。
|
||
|
||
## 变更影响
|
||
- NFR-9 敏感日志:security.py/deps.py 的 SECRET_KEY/JWT 载荷日志需脱敏(TS-12)。
|
||
|