Kiến trúc: 1 Authorization Server (identity provider, phát JWT) → N Resource Server (microservices, validate token cục bộ, không gọi auth server mỗi request).
Flow:
1. Client → POST /oauth2/token (client credentials / authorization code + PKCE)
2. AuthServer → trả JWT
3. Client → GET /api/data, header: Authorization: Bearer <JWT>
4. ResourceServer → verify chữ ký JWT (public key qua JWKS) + check claims (iss, exp, scope)
5. Trả 200 / 401OAuth 2.1 vs 2.0: bỏ grant nguy hiểm — Implicit (token trong URL), Password (client cầm credential); bắt buộc PKCE với Authorization Code.
Config Resource Server (Spring Security 6): oauth2ResourceServer(o -> o.jwt(j -> j.jwkSetUri(...))) — code chi tiết xem câu Authorization Server vs Resource Server.
Thực tế: đa số dùng auth server bên thứ ba (Keycloak, Auth0, Okta) thay vì tự build — security phức tạp, dễ sai.