Skip to content

ADR-0001. JWKS issuer duy nhất làm trust root của nền tảng

TrườngGiá trị
Trạng tháiAccepted
Ngày2026-01-08
Người quyết địnhidentity-team, platform-architect
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. Shared HMAC secret — mọi service dùng cùng một secret; đối xứng.
    2. Asymmetric (JWKS) — một issuer ký, các service khác xác minh bằng public key.

Quyết định

@nx/identityđơn vị duy nhất có thẩm quyền ký. Sử dụng ES256 (ECDSA over P-256) và publish public key tại GET /jw-certs (định dạng JWKS RFC 7517). Mọi service khác kế thừa VerifierApplication từ @nx/core — fetch /jw-certs lúc boot, cache theo kid, và xác minh chữ ký tại chỗ.

Hiện không có issuer phụ, federation, hay key isolation theo từng merchant.

Hệ quả

ƯuNhược
Sister service không cần shared secretSingle point of trust — nếu signing key bị lộ, mọi JWT đều có thể bị giả mạo
Bất đối xứng: lộ public key không quan trọngXoay key về mặt vận hành phức tạp (cần cache sister có nhận biết kid)
Định dạng chuẩn (JWKS / JWS / JWT) — tương tác đượcMột key duy nhất cho mọi merchant — không có tenant isolation
Sister service không phụ thuộc auth vào identity per-requestIdentity là critical path toàn nền tảng (mức ưu tiên alert HIGH)

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

Phương ánƯuNhượcLý do từ chối
Shared HMAC secretĐơn giảnBất kỳ secret nào lộ đều khiến mọi thứ tổn hại; xoay key cần restart đồng bộVận hành mong manh
Signing key theo từng merchantTenant isolationPhức tạp khổng lồ trong logic xác minh phía sister; bùng nổ số lượng keyQuá sớm; multi-tenant key isolation đã loại khỏi scope
Ký theo từng servicePhi tập trungTrust giữa các service sụp đổ; mỗi service phải biết key của mọi service khácKhông
IdP ngoài (Auth0, Cognito)OutsourcedVendor lock-in; latency; chi phíCần kiểm soát nội bộ ngữ nghĩa role/permission

Tham chiếu

  • @nx/core 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.