feat(auth): refresh token 续期(B2) — 不透明哈希+单次旋转+/auth/refresh+/auth/logout
- auth/refresh.go: RefreshStore(Issue/Rotate/Revoke/RevokeAll/RevokeByUser), SHA-256哈希256-bit随机串, 单次旋转事务(并发重放fail-closed) - 迁移0008_refresh_tokens(id/user_id/role/token_hash UNIQUE/expires_at/revoked_at + 索引) - gateway: POST /v1/auth/refresh(旋转/续期) + /v1/auth/logout(单/全设备); login响应增refreshToken - config: AUTH_REFRESH_TTL(720h)/AUTH_REFRESH_ROTATE_DISABLED; decode.go 支持time.Duration - rotate-jwt成功后RevokeAll(响应refreshTokensRevoked), revoke-keys不动refresh - 14测试+真实二进制e2e, build/vet/test绿+交叉编译 - Docs/api-client v0.25 + api-reference §2.3/2.4 同步
This commit is contained in:
1 parent
7ecb43bd5d
commit
026b27b310
17 files changed
+1237
-13
No files matched your search
@@ -23,6 +23,11 @@ JWT_SECRET=change-me-to-a-random-string-at-least-32-characters
|
||||
ADMIN_USERNAME=admin
|
||||
ADMIN_PASSWORD=admin12345
|
||||
REGISTRATION_ENABLED=true
|
||||
# 不透明 refresh token 有效期(Go duration,如 720h = 30 天);access token 固定 24h。
|
||||
AUTH_REFRESH_TTL=720h
|
||||
# refresh token 单次使用轮换默认开启(用旧换新、防重放);仅当客户端无法保存轮换后的
|
||||
# 新 token 时才设为 true 关闭轮换。
|
||||
AUTH_REFRESH_ROTATE_DISABLED=false
|
||||
|
||||
# ---- 数据库 ----
|
||||
# SQLite 为默认(单二进制、无需外部服务)。
|
||||
|
||||
Reference in new issue
Block a user