Skip to content

Auth Flow ​

Cơ chế xác thực (authentication) và phân quyền (authorization) trên web không được thiết kế hoàn chỉnh ngay từ đầu, mà là một chuỗi các giải pháp nối tiếp nhau: mỗi giải pháp giải quyết một vấn đề cụ thể của giải pháp trước, đồng thời để lộ ra một vấn đề mới, từ đó thúc đẩy giải pháp tiếp theo ra đời.

mermaid
flowchart TD
    A["HTTP Basic Auth<br/>gửi password ở mỗi request"] -->|"lộ trên đường truyền,<br/>không thu hồi (revoke) được"| B["Session + Cookie<br/>server lưu trạng thái đăng nhập"]
    B -->|"không thể chia sẻ password<br/>cho ứng dụng bên thứ ba"| C["OAuth 1.0<br/>uỷ quyền có phạm vi (scope)"]
    C -->|"chữ ký mật mã (signature)<br/>quá phức tạp, dễ cài sai"| D["OAuth 2.0<br/>bearer token + TLS"]
    D -->|"chỉ giải quyết authorization,<br/>không định nghĩa 'đăng nhập'"| E["OpenID Connect (OIDC)<br/>bổ sung ID Token"]
    E -->|"mobile app không giữ được<br/>client secret, bị đánh cắp authorization code"| F["PKCE<br/>code_verifier / code_challenge"]
    F -->|"session lưu ở server<br/>không scale tốt cho hệ thống phân tán"| G["JWT (stateless token)<br/>tự chứa toàn bộ thông tin"]
    G -->|"token đã cấp không thể<br/>thu hồi trước khi hết hạn"| H["Hybrid (hiện tại)<br/>JWT ngắn hạn + refresh token có thể thu hồi"]
#Giải phápVấn đề được giải quyếtVấn đề mới phát sinh
1HTTP Basic AuthXác thực đơn giản qua giao thức HTTPPhải gửi lại mật khẩu ở mỗi request, không có khái niệm "đăng xuất"
2Session + CookieKhông cần gửi lại mật khẩu, server chủ động kiểm soát đăng nhập/đăng xuấtNhiều server cần chia sẻ session (Redis, sticky session)
3OAuth 1.0 (2007/2010)Ứng dụng bên thứ ba truy cập được dữ liệu mà người dùng không phải đưa mật khẩuCơ chế ký (signature) bằng mật mã quá phức tạp, khó triển khai đúng
4OAuth 2.0 (2012)Bỏ chữ ký, dùng bearer token + TLS, đơn giản hoá triển khaiChỉ định nghĩa authorization, không chuẩn hoá khái niệm "đăng nhập"
5OpenID Connect — OIDC (2014)Chuẩn hoá xác thực danh tính bằng ID Token, xây trên nền OAuth 2.0Ứng dụng native/mobile không giữ được client secret an toàn
6PKCE (2015)Ngăn kẻ tấn công đánh cắp authorization code trên mobileChưa giải quyết bài toán mở rộng cho hệ thống phân tán
7JWT (stateless token)Không cần session store dùng chung, phù hợp hệ thống phân tán/microservicesKhông thể thu hồi một token đã cấp trước khi nó hết hạn
8Hybrid (hiện tại, 2026)Kết hợp access token JWT sống ngắn (5–15 phút) với refresh token có thể thu hồi ngay— (kiến trúc mặc định hiện nay)

Bài học rút ra: mỗi lớp giải pháp mới đều là một sự đánh đổi (trade-off), không phải một bước tiến tuyệt đối. Khi đánh giá một thiết kế auth — kể cả do AI đề xuất — nên đặt ba câu hỏi: nó đang giải quyết vấn đề cụ thể nào, cái giá phải trả là gì, và vấn đề mới mà nó có thể tạo ra có thực sự liên quan đến hệ thống đang xây dựng hay không.

Các trang tiếp theo đi sâu vào cơ chế hoạt động thật sự của từng giải pháp trong chuỗi trên — đọc theo thứ tự trong sidebar để mạch kiến thức liền nhau (dùng nút "Trang sau" ở cuối mỗi trang).