Skip to content

ADR-0001. JWKS issuer duy nhất làm gốc tin cậy của nền tảng

TrườngGiá trị
Trạng tháiAccepted
Ngày2026-01-08
Người quyết địnhPhat Nguyen
Thay thế-

Bối cảnh

  • BANA có 10+ backend service đều cần xác thực user.
  • Mỗi service cần xác minh JWT mà không phải gọi về trung tâm trên mỗi request.
  • Hai mẫu:
    1. Secret HMAC dùng chung - mọi service dùng cùng một secret; đối xứng.
    2. Bất đối xứng (JWKS) - một issuer ký, các service khác xác minh bằng khoá công khai.

Quyết định

@nx/identityđơn vị duy nhất có thẩm quyền ký. Nó dùng ES256 (ECDSA trên P-256) và công bố khoá công khai tại GET /jw-certs (định dạng JWKS RFC 7517). Mọi service khác kế thừa VerifierApplication từ @nx/core - tải /jw-certs lúc khởi động, cache theo kid, và xác minh chữ ký tại chỗ.

Hiện không có issuer phụ, liên kết liên miền (federation), hay cô lập khoá theo từng merchant.

Hệ quả

ƯuNhược
Service anh em không cần secret dùng chungĐiểm tin cậy duy nhất - nếu khoá ký bị lộ, mọi JWT đều có thể bị giả mạo
Bất đối xứng: lộ khoá công khai không quan trọngXoay khoá về mặt vận hành phức tạp (cần cache phía service anh em có nhận biết kid)
Định dạng chuẩn (JWKS / JWS / JWT) - có thể tương tácMột khoá duy nhất cho mọi merchant - không cô lập theo tenant
Service anh em không phụ thuộc xác thực vào identity trên từng requestIdentity là đường tới hạn của toàn nền tảng (mức ưu tiên cảnh báo HIGH)

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

Phương ánƯuNhượcLý do từ chối
Secret HMAC dùng chungĐơn giảnBất kỳ secret nào lộ đều khiến mọi thứ tổn hại; xoay khoá cần khởi động lại đồng bộVận hành mong manh
Khoá ký theo từng merchantCô lập theo tenantPhức tạp khổng lồ trong logic xác minh phía service anh em; bùng nổ số lượng khoáQuá sớm; cô lập khoá đa tenant đã loại khỏi scope
Ký theo từng servicePhi tập trungTin cậy giữa các service sụp đổ; mỗi service phải biết khoá của mọi service khácKhông khả thi
IdP bên ngoài (Auth0, Cognito)Thuê ngoàiPhụ thuộc nhà cung cấp; độ trễ; chi phíCần kiểm soát nội bộ ngữ nghĩa role/permission

Tham chiếu

  • @nx/core các lớp cơ sở IssuerApplicationVerifierApplication
  • JWKSIssuerTokenService (dùng bởi AuthenticationService.generateToken)
  • RFC 7517 (JWKS), RFC 7519 (JWT), RFC 7515 (JWS)

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