Khắc Phục Sự Cố
Danh mục các lỗi thường gặp trong quá trình tích hợp OAuth 2.0 và giải pháp khắc phục.
1. Lỗi Trong Quá Trình Ủy Quyền (Authorization Flow)
Lỗi: Invalid client_id
Nguyên nhân: Giá trị client_id không tồn tại trong hệ thống hoặc ứng dụng đang ở trạng thái ngừng kích hoạt.
- Kiểm tra lại chuỗi
client_idtrong tệp cấu hình (phân biệt chữ hoa và chữ thường). - Xác nhận trạng thái ứng dụng đang hiển thị là "Hoạt động" trong Bảng điều khiển Nhà phát triển.
Lỗi: Invalid redirect_uri
Nguyên nhân: URL callback gửi lên không khớp chính xác với danh sách URI chuyển hướng đã đăng ký.
- So khớp chính xác từng ký tự bao gồm giao thức (
http://so vớihttps://), tên miền và đường dẫn con. - Với môi trường phát triển cục bộ, đăng ký chính xác địa chỉ IP hoặc localhost (ví dụ:
http://localhost:3000/callback). - Không sử dụng dấu gạch chéo thừa ở cuối đường dẫn nếu trong cấu hình đăng ký không có.
Lỗi: Invalid scope
Nguyên nhân: Ứng dụng yêu cầu quyền nằm ngoài danh sách được máy chủ hỗ trợ.
- Chỉ sử dụng các scope được hỗ trợ:
openid,profile,email. - Các giá trị scope phải được phân cách bằng dấu cách đơn, không dùng dấu phẩy.
Lỗi: CSRF state mismatch
Nguyên nhân: Giá trị state trả về trong callback không trùng khớp với giá trị đã lưu trong phiên của ứng dụng khách.
- Đảm bảo Session của ứng dụng hoạt động bình thường và cookie phiên không bị chặn bởi chính sách trình duyệt.
- Lưu giá trị
statevào Session hoặc cookie HttpOnly trước khi thực hiện chuyển hướng.
2. Lỗi Trao Đổi Token (Token Endpoint)
Lỗi: Invalid authorization code
Nguyên nhân: Mã ủy quyền đã hết hạn hoặc đã được sử dụng trước đó.
- Mã ủy quyền chỉ có thời hạn sử dụng trong 10 phút. Backend cần gửi yêu cầu đổi token ngay khi nhận được callback.
- Mã ủy quyền chỉ dùng được 1 lần duy nhất theo chuẩn RFC 6749. Không gửi lại mã cũ nếu yêu cầu trước đó đã hoàn tất.
Lỗi: Invalid client credentials
Nguyên nhân: Client Secret không chính xác hoặc ứng dụng là Public Client nhưng lại gửi yêu cầu bí mật.
- Kiểm tra chuỗi
client_secret, tránh khoảng trắng thừa khi copy/paste. - Đối với Public Client (SPA/Mobile), sử dụng
code_verifier(PKCE) thay vì gửiclient_secret.
Lỗi: Unauthorized (HTTP 401) Khi Gọi API Resource
Nguyên nhân: Header Authorization bị thiếu hoặc token hết hạn.
- Định dạng tiêu đề bắt buộc:
Authorization: Bearer <ACCESS_TOKEN>(có khoảng trắng sau từ khóa Bearer). - Nếu token hết hạn (sau 3600 giây), sử dụng
refresh_tokenđể yêu cầu cấp mới.
3. Kiểm Tra & Chẩn Đoán Lỗi Bằng cURL
Sử dụng dòng lệnh cURL để kiểm tra độc lập các điểm cuối dịch vụ:
# 1. Kiểm tra Token Endpoint
curl -X POST "https://accounts.lequangkhai.id.vn/api/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code&code=TEST_CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_SECRET&redirect_uri=YOUR_CALLBACK"
# 2. Kiểm tra UserInfo Endpoint với Access Token
curl -X GET "https://accounts.lequangkhai.id.vn/api/userinfo" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"