Đang tải...

Bài 4: Authorization Code Flow (Luồng chuẩn cho Web App)

29/05/2026
4 phút đọc
Bài 4: Authorization Code Flow (Luồng chuẩn cho Web App)
Tại sao lại gọi là "Authorization Code"? Vì nó không trả trực tiếp Token cho ứng dụng của bạn (để tránh lộ lọt trên trình duyệt), mà nó gửi qua một bước tr...

Tại sao lại gọi là "Authorization Code"? Vì nó không trả trực tiếp Token cho ứng dụng của bạn (để tránh lộ lọt trên trình duyệt), mà nó gửi qua một bước trung gian là "Authorization Code".

1. Tại sao cần luồng này? (Security First)

Nếu chúng ta gửi thẳng Access Token qua URL (trình duyệt), token rất dễ bị đánh cắp qua lịch sử trình duyệt hoặc logs của server trung gian. Luồng này tách biệt việc xác thực và cấp token thành 2 bước riêng biệt.

2. Các bước vận hành (The Flow)

  1. Request (Đăng nhập): Bạn truy cập vào Web App của công ty. App chuyển hướng (redirect) bạn đến IdP với một đường link chứa client_idredirect_uri.
  2. Authentication (Đăng nhập tại IdP): Bạn nhập username/password tại IdP (lúc này App của công ty không hề biết mật khẩu của bạn).
  3. Authorization Code: Sau khi đăng nhập xong, IdP không trả token ngay. Nó chuyển hướng bạn về lại redirect_uri của App kèm theo một đoạn mã ngắn gọi là Authorization Code.
  4. Exchange (Đổi Code lấy Token): Server của App (Backend) dùng đoạn code này gửi một yêu cầu bí mật (cần thêm client_secret mà chỉ Backend mới biết) đến IdP để "đổi" lấy Access Token.
  5. Access: IdP kiểm tra code hợp lệ và trả về Access Token (và ID Token). Bây giờ, App của bạn đã có "chìa khóa" để gọi API.

3. Tại sao bước 4 là "vũ khí bí mật"?

  • An toàn tuyệt đối: Việc trao đổi Code lấy Token diễn ra từ Server-to-Server (kênh bảo mật), trình duyệt của người dùng không hề tham gia vào bước này.
  • Client Secret: Đây là "bí mật" chỉ nằm trên server của bạn (biến môi trường .env trong Laravel/Go). Kẻ xấu dù có chặn được trình duyệt cũng không thể lấy được Token nếu không có cái Secret này.

Bảng tóm tắt các vai trò trong luồng

User (Bạn): Người thực hiện thao tác. Client (App của bạn): Ứng dụng đang cần xác thực người dùng. Client (App của bạn): Ứng dụng đang cần xác thực người dùng. IdP (Server xác thực): Nơi giữ User Database và cấp phát Token. Authorization Code: "Vé tạm thời" dùng 1 lần duy nhất, có thời gian sống cực ngắn.

Câu hỏi kiểm tra kiến thức cho bạn: Tại sao chúng ta phải dùng Client Secret ở bước 4 thay vì để trình duyệt thực hiện trực tiếp? (Gợi ý: Hãy nghĩ về việc trình duyệt là môi trường "công cộng" mà ai cũng có thể xem được nội dung gửi đi).

Nếu bạn đã hiểu rõ luồng này, bài tiếp theo chúng ta sẽ nói về "SSO trong kiến trúc Microservices" – nơi mà bạn có hàng chục Service cần kiểm tra Token cùng lúc

📚 Nguồn: Viblo

Bình luận

0 bình luận

Email không hiển thị công khai.

Chưa có bình luận nào. Hãy là người đầu tiên bình luận.

Chia sẻ bài viết

Cần tư vấn?

Liên hệ với chúng tôi để được hỗ trợ

Liên hệ ngay

Bài viết liên quan

Proxy hoạt động ở tầng nào trong mô hình TCP/IP? HTTP Proxy Và SOCKS5 nằm ở đâu?
09/06/2026

Proxy hoạt động ở tầng nào trong mô hình TCP/IP? HTTP Proxy Và SOCKS5 nằm ở đâu?

Proxy hoạt động ở tầng nào? Sau khi đã đi qua các tầng mạng như Physical Layer, Data Link Layer, Internet Layer, Transport Layer và Application Layer, ta có thể nhìn Proxy rõ ...

Đọc thêm
Red Team RAG: Khi mỗi pipeline là một đường hầm tối – Phần 2: Đầu độc dòng chảy – Từ ingestion đến sụp đổ
09/06/2026

Red Team RAG: Khi mỗi pipeline là một đường hầm tối – Phần 2: Đầu độc dòng chảy – Từ ingestion đến sụp đổ

## Lời mở đầu: Bạn đã vào hầm. Bây giờ, hãy đầu độc dòng nước. Ở phần 1, chúng ta đã đứng trước **cửa hầm**, học cách đọc bản đồ pipeline RAG, v...

Đọc thêm
Vì sao giá trị truyền thống luôn được đặt lên hàng đầu
09/06/2026

Vì sao giá trị truyền thống luôn được đặt lên hàng đầu

Giá trị truyền thống không chỉ là yếu tố mang tính hoài niệm, mà còn đóng vai trò nền tảng trong việc định hình bản sắc và chiều sâu của một công trình ...

Đọc thêm

Bắt đầu dự án của bạn

Hãy để Flash Dev đồng hành cùng bạn

Liên hệ ngay