认证 API
认证模块共 9 个接口,采用 PBKDF2-SHA256 密码加密与自实现 HMAC-SHA256 签名 token(7 天有效期)。
接口一览
| # | 方法 | 路径 | 说明 |
|---|---|---|---|
| 1 | GET | /api/auth/status | 查询是否需初始化({need_setup}) |
| 2 | POST | /api/auth/setup | 初始化管理员(创建即登录) |
| 3 | POST | /api/auth/captcha | 生成 6 位纯数字 SVG 验证码(120s 一次性) |
| 4 | POST | /api/auth/login | 常规登录(用户名 + 密码 + 验证码) |
| 5 | POST | /api/auth/logout | 登出 |
| 6 | POST | /api/auth/reset-password | 重置密码(成功后旧 token 失效) |
| 7 | GET | /api/users/me | 当前用户资料 |
| 8 | PUT | /api/users/me | 修改昵称 / 头像 / 邮箱 |
| 9 | PUT | /api/users/me/password | 修改密码(成功后强制重登) |
登录流程
GET /api/auth/status
├─ need_setup=true → 显示初始化面板(无验证码)→ POST /setup → 创建即登录
└─ need_setup=false → POST /captcha 获取验证码 → POST /login → {token, user}安全设计
- 密码:PBKDF2-SHA256(加盐 16B 随机,迭代 200,000),密文存储无明文;
- token:HMAC-SHA256 签名,payload 含
pwd_ver;改密 / 重置后password_version+1,旧 token 立即失效(401); - 验证码:6 位纯数字、纯 SVG 生成(零依赖)、120s 有效期、一次性(取用即删);
- 错误码:400(验证码/密码错误)、401(未登录/token 失效)、422(校验失败)。
请求示例
# 登录
curl -X POST http://localhost:8000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"your_password","captcha_id":"...","code":"123456"}'
# 携带 token 访问用户资料
curl http://localhost:8000/api/users/me \
-H "Authorization: Bearer <token>"