PON auth-service — Đăng nhập, phát JWT và một request có JWT (auth-service → chat/ai/connector → client)

PON auth-service — Đăng nhập, phát JWT và một request có JWT (auth-service → chat/ai/connector → client) A workflow diagram generated by Archify. 01 / Người dùng · Web / Flutter 02 / auth-service · đăng nhập (NestJS :3001) 03 / auth-service · 2FA & phát token 04 / Xác thực JWT: chat · ai · connector 05 / Redis: sess:{sid} · khoá tạm 06 / MongoDB: users · roles 07 / Đổi quyền: admin → chat-service EX / Nhánh từ chối → 401 / 403 Yếu tố 1 · 2FA Phát token · dùng JWT Refresh · đổi claims Đăng nhập · mật khẩu · Google · OIDC · Người dùng · Web / Flutter › Yếu tố 1 · 2FA · POST /auth/login Đăng nhập mật khẩu · Google · OIDC POST /auth/login Gọi API kèm JWT · Bearer · STOMP CONNECT · Người dùng · Web / Flutter › Phát token · dùng JWT · access 15 phút Gọi API kèm JWT Bearer · STOMP CONNECT access 15 phút Retry & reconnect · token mới · refetch · STOMP · Người dùng · Web / Flutter › Refresh · đổi claims · không đăng xuất Retry & reconnect token mới · refetch · STOMP không đăng xuất AuthService.login · lockout · SSO · bcrypt · auth-service · đăng nhập (NestJS :3001) › Yếu tố 1 · 2FA · 5 req/phút/IP AuthService.login lockout · SSO · bcrypt 5 req/phút/IP OAuth callback · Google / OIDC → login_code · auth-service · đăng nhập (NestJS :3001) › Yếu tố 1 · 2FA · redirect về client OAuth callback Google / OIDC → login_code redirect về client POST /auth/refresh · rotate CAS · ký claims mới · auth-service · đăng nhập (NestJS :3001) › Refresh · đổi claims · iat ≥ claimsAt POST /auth/refresh rotate CAS · ký claims mới iat ≥ claimsAt 2FA gate · Owner/Admin bắt buộc · auth-service · 2FA & phát token › Yếu tố 1 · 2FA · isAdminLike đọc DB 2FA gate Owner/Admin bắt buộc isAdminLike đọc DB issueTokensForUser · session + JWT có claims · auth-service · 2FA & phát token › Phát token · dùng JWT · HS256 · 15m issueTokensForUser session + JWT có claims HS256 · 15m Xác thực JWT · HS256 + HGETALL sess:{sid} · Xác thực JWT: chat · ai · connector › Phát token · dùng JWT · cache 5s (Java) Xác thực JWT HS256 + HGETALL sess:{sid} cache 5s (Java) Khoá tạm · attempts · mfa · code · Redis: sess:{sid} · khoá tạm › Yếu tố 1 · 2FA · TTL ngắn Khoá tạm attempts · mfa · code TTL ngắn sess:{sid} · hash · revoked · claimsAt · Redis: sess:{sid} · khoá tạm › Phát token · dùng JWT · TTL 30 ngày sess:{sid} hash · revoked · claimsAt TTL 30 ngày users · roles · roleId → permission matrix · MongoDB: users · roles › Yếu tố 1 · 2FA · đọc mỗi lần ký users · roles roleId → permission matrix đọc mỗi lần ký markClaimsStale · HSET claimsAt mọi sess · Đổi quyền: admin → chat-service › Refresh · đổi claims · PUBLISH auth:claims-changed markClaimsStale HSET claimsAt mọi sess PUBLISH auth:claims-changed ClaimsChangedListener · evict cache 5s · báo socket · Đổi quyền: admin → chat-service › Refresh · đổi claims · chat-service ClaimsChangedListener evict cache 5s · báo socket chat-service Từ chối đăng nhập · LOCKED · SSO · BLOCKED · Nhánh từ chối → 401 / 403 › Yếu tố 1 · 2FA · không có session Từ chối đăng nhập LOCKED · SSO · BLOCKED không có session 401 từ validator · STALE → refresh · REVOKED · Nhánh từ chối → 401 / 403 › Phát token · dùng JWT · mã chung 4 service 401 từ validator STALE → refresh · REVOKED mã chung 4 service PUBLISH 401 Bearer exchange tokens createSession CLAIMS_CHANGED đúng sai OK claims token mới rotate revoked · stale ≥5 → khoá OAuth mật khẩu HGETALL Legend User UI Agent logic Policy Context / trace External system