将标注平台从本地 JWT 签发迁移为 SSO 统一 token 认证。按照后端核心组件 → 中间件改造 → 路由改造 → 前端适配 → 清理的顺序实施,确保每一步都可验证。
[x] 1. 实现 TokenCacheService
backend/services/token_cache_service.py,实现内存级 token 缓存CacheEntry 数据类(user_info + created_at)get(token) 方法:查询缓存,检查 TTL,过期则删除并返回 Noneset(token, user_info) 方法:写入缓存invalidate(token) 和 clear() 方法[x] 2. 改造 OAuthService,新增 SSO token 验证和刷新方法
backend/services/oauth_service.py 中新增 verify_sso_token 方法/oauth/userinfo 端点验证 token{"code": 0, "data": {...}} 包装格式和标准格式backend/services/oauth_service.py 中新增 refresh_sso_token 方法/oauth/token 端点发送 grant_type=refresh_token 请求verify_sso_token 成功/失败/SSO 不可用场景refresh_sso_token 成功/失败场景[x] 3. 改造 AuthMiddleware
backend/middleware/auth_middleware.py 的 dispatch 方法OAuthService.verify_sso_token 验证[x] 4. Checkpoint - 后端核心组件验证
[x] 5. 改造 OAuth Router 和移除 Auth Router
backend/routers/oauth.py 的 callback 端点JWTService.create_access_token 和 JWTService.create_refresh_token 调用backend/routers/oauth.py 中新增 /api/oauth/refresh 端点OAuthService.refresh_sso_tokenbackend/routers/oauth.py 中新增 /api/oauth/me 端点request.state.user 获取用户信息(由中间件填充)backend/routers/auth.py 中的 login、register、refresh 端点/api/auth/me 端点(重定向到 /api/oauth/me)或直接移除整个 routerbackend/main.py 中移除 auth router 的注册[x] 6. 配置和清理
backend/config.pytoken_cache_ttl 配置项config.dev.yaml 和 config.prod.yamlbackend/services/jwt_service.pybackend/services/auth_service.py(移除 register_user, login_user, refresh_tokens)backend/schemas/auth.py 中不再需要的 schema(UserRegister, UserLogin, TokenRefresh, TokenPayload)[x] 7. 前端适配
web/apps/lq_label/src/services/api.ts 中的 token refresh 逻辑/api/auth/refresh 改为 /api/oauth/refreshweb/apps/lq_label/src/components/login-form/login-form.tsxregister-form 组件app.tsx 路由中移除 /register 路由auth-service.ts 中移除 register 函数web/apps/lq_label/src/services/auth-service.tslogin、register、refreshToken 函数getCurrentUser 端点为 /api/oauth/me[x] 8. Final checkpoint - 全面验证
* are optional and can be skipped for faster MVP