OAuth2 là framework ủy quyền (authorization) — cho phép một ứng dụng truy cập tài nguyên của user mà không cần biết mật khẩu của họ. Bốn role:
- Resource owner: người dùng sở hữu dữ liệu.
- Client: ứng dụng muốn truy cập dữ liệu (web app, mobile app, service).
- Authorization server: xác thực user và cấp access token (vd Google, Auth0, Keycloak).
- Resource server: API giữ dữ liệu, kiểm tra token trước khi trả về.
Grant type chính:
- Authorization code (+ PKCE): flow chuẩn cho app có user — redirect user tới authorization server đăng nhập, nhận code, đổi code lấy token ở backend. PKCE chặn tấn công đánh cắp code, giờ khuyến nghị cho mọi loại client.
- Client credentials: máy-với-máy (service gọi service), không có user — client tự xác thực bằng secret để lấy token.
- Refresh token: đổi access token mới khi token cũ hết hạn, không bắt user đăng nhập lại.
Password grant (ROPC) bị loại bỏ (OAuth 2.0 Security BCP, OAuth 2.1): client nhận mật khẩu thô của user — phá vỡ chính mục đích của OAuth, không hỗ trợ MFA/SSO, và tập cho user thói quen gõ mật khẩu vào ứng dụng bên thứ ba.