- Authentication (xác thực): bạn là ai — kiểm danh tính (mật khẩu, OAuth, passkey).
- Authorization (phân quyền): bạn được làm gì — kiểm quyền truy cập tài nguyên (RBAC, scope).
Thứ tự: xác thực trước, phân quyền sau. Sai quyền → 403; chưa xác thực → 401.
Server verify JWT: token gồm header.payload.signature. Server tính lại chữ ký trên header.payload bằng secret (HS256) hoặc public key (RS256) và so với signature → phát hiện sửa đổi; đồng thời kiểm claim exp (hết hạn), iss/aud. Vì stateless nên không tra DB — đổi lại khó thu hồi trước hạn (dùng access token sống ngắn + refresh, hoặc blacklist). Với OAuth2, SPA nên dùng Authorization Code + PKCE.