Skip to content

ADR-0003. Stateless JWT — không có Danh sách Revocation, TTL ngắn + refresh

TrườngGiá trị
Trạng tháiAccepted
Ngày2026-02-10
Người quyết địnhidentity-team
Thay thế

Bối cảnh

  • JWT là claim đã ký; một khi được phát, chúng có hiệu lực đến hết hạn — không có cách nào vô hiệu tức thì mà không cần state.
  • Thêm Danh sách Revocation (blocklist) đồng nghĩa mọi sister service phải kiểm tra nó trên mỗi request — phá hỏng mục đích của xác minh stateless.
  • Workflow POS cần logout / lockout phản hồi nhanh (admin vô hiệu hoá user → họ phải bị cắt truy cập sớm).

Quyết định

JWT là stateless — không có Danh sách Revocation. Chấp nhận đánh đổi:

  • TTL ngắn (mặc định 1 giờ) — phạm vi ảnh hưởng có giới hạn.
  • Refresh token xoay vòng khi sử dụng — phiên dài hạn vẫn nhận token mới.
  • Lockout / disable cập nhật User.status ngay lập tức, nhưng người giữ token vẫn còn quyền đến khi hết hạn tự nhiên. Lockout nghiêm trọng (sự cố bảo mật) yêu cầu xoay key.

Hệ quả

ƯuNhược
Sister service xác minh tại chỗ không cần shared stateUser bị disable vẫn còn quyền tới TTL
Không có blocklist tập trung để tham vấnLockout nghiêm trọng yêu cầu xoay key JWKS (force-logout mọi người)
Mở rộng ngang dễ dàng"Logout phiên khác" là UX best-effort (token trên trình duyệt vẫn hợp lệ)

Mẫu giảm thiểu

  • Thao tác nhạy cảm (đổi mật khẩu, hạ role) re-fetch trạng thái user và đánh giá lại phân quyền phía server
  • TTL ngắn (1h) + refresh khi hoạt động = cửa sổ stale tối đa 1h
  • Với sự cố: xoay JWKS keypair → mọi token trở thành không hợp lệ

Phương án đã xem xét

Phương ánƯuNhượcLý do từ chối
Token blocklist trên RedisRevocation tức thìSister service phải kiểm tra Redis trên mỗi request — phá hỏng xác minh statelessSai layer
Reference token (opaque, lưu phía server)Revocation tức thìMỗi request → gọi HTTP đến identity; thảm hoạ latencySai trade-off
TTL rất ngắn (5min)Cửa sổ stale nhỏ hơnRefresh churn quá mứcChi phí hiệu năng

Tham chiếu

  • JWKSIssuerTokenService (cấu hình TTL)
  • AuthenticationService.refreshToken

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.