Access code là gì? Vai trò trong OAuth 2.0 và Zalo API

Khi tích hợp đăng nhập hoặc cấp quyền truy cập dữ liệu, lập trình viên thường gặp các khái niệm authorization code, access token và refresh token. Access code là một giá trị trung gian xuất hiện trong Authorization Code Flow của OAuth 2.0. Mã này không dùng trực tiếp để gọi API mà được backend đổi lấy access token tại máy chủ cấp quyền.

Hiểu đúng Access code là gì giúp đội ngũ kỹ thuật xây dựng luồng xác thực an toàn, tránh nhầm code với token và xử lý chính xác các lỗi thường gặp khi tích hợp Zalo API hoặc những nền tảng dùng OAuth 2.0.

Access code là gì trong OAuth 2.0?

Access code thường được gọi chính xác là authorization code, tức mã ủy quyền. Đây là chuỗi ký tự tạm thời do authorization server phát hành sau khi người dùng đăng nhập và đồng ý cấp quyền cho ứng dụng.

Mã được trả về thông qua redirect URI đã đăng ký trước. Backend của ứng dụng nhận code, sau đó gửi code cùng các thông tin xác thực cần thiết đến token endpoint để đổi lấy access token.

Luồng cơ bản gồm các bước:

  1. Ứng dụng chuyển người dùng đến trang đăng nhập và cấp quyền.
  2. Người dùng xác thực, xem phạm vi quyền rồi chấp thuận.
  3. Authorization server chuyển hướng về ứng dụng kèm access code.
  4. Backend gửi code đến token endpoint.
  5. Máy chủ kiểm tra code và trả access token, có thể kèm refresh token.

Access code chỉ là cầu nối giữa bước người dùng cấp quyền và bước ứng dụng nhận token. Nó không đại diện lâu dài cho phiên làm việc, không phải mật khẩu và không nên được lưu như access token.

Vì sao OAuth cần mã trung gian?

Access code là gì - Access code là gì trong OAuth 2.0?
Access code là gì – Access code là gì trong OAuth 2.0?

Nếu access token được trả trực tiếp qua trình duyệt, token có thể xuất hiện trong lịch sử truy cập, log, tiện ích mở rộng hoặc mã phía client. Authorization Code Flow giảm rủi ro bằng cách chỉ chuyển một mã có thời hạn rất ngắn về callback.

Việc đổi code lấy token diễn ra qua kết nối server-to-server. Nhờ đó, client secret và token được giữ ở backend thay vì lộ trong URL hoặc JavaScript.

Vai trò của access code trong Authorization Code Flow

OAuth 2.0 là giao thức ủy quyền, cho phép ứng dụng truy cập tài nguyên mà không cần biết mật khẩu của người dùng. Trong Authorization Code Flow, access code là bằng chứng tạm thời cho thấy người dùng đã hoàn tất xác thực và đồng ý với phạm vi quyền được yêu cầu.

Mỗi code thường gắn với một giao dịch cụ thể, bao gồm:

  • Ứng dụng đã gửi yêu cầu cấp quyền.
  • Người dùng đã đăng nhập và chấp thuận.
  • Redirect URI đã sử dụng.
  • Scope được phê duyệt.
  • Thời điểm mã được tạo.
  • Dữ liệu PKCE nếu luồng có áp dụng.

Khi backend đổi code, authorization server đối chiếu các thông tin này. Nếu mã hết hạn, đã sử dụng, thuộc ứng dụng khác hoặc không khớp redirect URI, yêu cầu sẽ bị từ chối.

Vai trò của state và PKCE

Access code là gì - Vai trò của access code trong Authorization Code Flow
Access code là gì – Vai trò của access code trong Authorization Code Flow

Tham số state được ứng dụng tạo trước khi chuyển người dùng đến trang cấp quyền. Khi người dùng quay về callback, backend phải so sánh state nhận được với giá trị đã lưu. Nếu không khớp, ứng dụng nên dừng luồng để hạn chế giả mạo yêu cầu và nhầm phiên.

PKCE bổ sung một lớp bảo vệ khác. Ứng dụng tạo code_verifier, gửi giá trị biến đổi là code_challenge ở bước xin quyền và gửi lại code_verifier khi đổi token. Kẻ tấn công lấy được code vẫn khó đổi thành token nếu không có giá trị xác minh phù hợp.

Cách đổi access code lấy access token

Sau khi nhận code tại callback, backend gửi yêu cầu đến token endpoint. Cách đặt header, phương thức ký và tên tham số phụ thuộc từng nền tảng, nhưng cấu trúc phổ biến gồm:

  • grant_type=authorization_code.
  • code là mã vừa nhận.
  • redirect_uri phải khớp với bước xin quyền.
  • client_id xác định ứng dụng.
  • client_secret dành cho confidential client.
  • code_verifier nếu sử dụng PKCE.

Ví dụ minh họa bằng cURL:

curl -X POST "https://authorization-server.example/token" \
 -H "Content-Type: application/x-www-form-urlencoded" \
 -d "grant_type=authorization_code" \
 -d "code=AUTHORIZATION_CODE_RECEIVED" \
 -d "redirect_uri=https://app.example.com/oauth/callback" \
 -d "client_id=YOUR_CLIENT_ID" \
 -d "client_secret=YOUR_CLIENT_SECRET"

tại zalo web.

Access code là gì - Cách đổi access code lấy access token
Access code là gì – Cách đổi access code lấy access token
Rate this post

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *