JWKS
JWKS viết tắt của JSON Web Key Set.
Nó là một endpoint tiêu chuẩn (thường ở đường dẫn /.well-known/jwks.json
) mà Authorization Server (Auth Service, IdP, Keycloak, Ory Hydra, v.v.) public ra để cho các hệ thống khác (Gateway, microservices) có thể lấy public keys dùng verify chữ ký của JWT.
Giải thích ngắn gọn
JWT (JSON Web Token) thường được ký bằng cặp private key / public key (RS256, ES256…).
Auth Service (IdP) giữ private key để ký token.
Các service khác cần public key để kiểm tra token có hợp lệ không.
JWKS chính là tập hợp các public keys đó, ở dạng JSON.
Ví dụ JWKS
{
"keys": [
{
"kty": "RSA",
"kid": "abc123", // key ID, để phân biệt khi rotate keys
"use": "sig", // dùng để ký/verify
"alg": "RS256", // thuật toán
"n": "0vx7ag...<big_base64>...",
"e": "AQAB"
}
]
}
kty
: loại key (RSA, EC, OKP).kid
: key id, giúp client biết token nào phải verify bằng key nào.n
,e
: modulus và exponent (thành phần của public key RSA).alg
: thuật toán ký.
Cách dùng trong microservices
Client login → Auth svc phát JWT ký bằng private key.
Gateway / Shortlink svc lấy token → đọc
header.kid
.Truy vấn JWKS endpoint (cache lại).
Tìm đúng key theo
kid
.Dùng public key verify chữ ký của JWT.
=> Nhờ JWKS, services không cần gọi Auth svc mỗi lần để hỏi “token này có hợp lệ không”, mà chỉ cần verify offline bằng public key.
Điểm quan trọng trong prod
Cache JWKS: để giảm latency và tránh DDoS IdP.
Key rotation: khi IdP xoay vòng private key, JWKS sẽ có thêm key mới (
kid
khác). Services chỉ cần load JWKS lại là verify được.Defense-in-depth: nếu JWKS không tải được, dùng bản cache cũ trong TTL.
👉 Nói dễ hiểu: JWKS giống như “bảng public key online” mà Auth server công bố. Mọi service trong hệ thống chỉ cần lấy bảng đó về (cache) và verify JWT local, không cần gọi Auth svc mỗi lần.
Last updated