Appearance
OpenID Connect — ID Token và Access Token
OIDC bổ sung một loại token mới — ID Token — bên cạnh access token vốn có của OAuth 2.0. Hai loại token này phục vụ hai mục đích hoàn toàn khác nhau, dễ nhầm lẫn:
| ID Token | Access Token | |
|---|---|---|
| Trả lời câu hỏi | "Người dùng này là ai, xác thực khi nào" | "Ứng dụng được phép làm gì" |
| Định dạng | Luôn là JWT | Có thể là JWT hoặc chuỗi bất kỳ (opaque) |
| Người tiêu thụ | Chính ứng dụng (client) — đọc để biết user đăng nhập là ai | Resource server / API — dùng để cấp quyền truy cập tài nguyên |
| Có nên gửi tới API để xin dữ liệu không | Không | Có |
ID Token chứa các claim tối thiểu: sub (user id), iss, aud, chữ ký, và đặc biệt là nonce — một chuỗi ngẫu nhiên do ứng dụng sinh ra trước khi bắt đầu luồng đăng nhập, gửi kèm trong authorization request. Khi nhận lại ID Token, ứng dụng so khớp nonce trong token với giá trị đã lưu ở phiên hiện tại; nếu khác nhau (ví dụ kẻ tấn công phát lại một ID Token cũ) — từ chối ngay. Đây là cơ chế chống replay attack dành riêng cho ID Token.
OIDC không nhét toàn bộ thông tin hồ sơ người dùng (email, avatar, tên đầy đủ...) vào ID Token để tránh token quá nặng. Thay vào đó, các thông tin này được lấy riêng qua UserInfo endpoint — một API được bảo vệ, chỉ trả dữ liệu khi ứng dụng gửi kèm access_token hợp lệ.