Làm việc với AI

Dùng bản tóm tắt tối ưu cho ChatGPT, Claude, Grok hoặc Cursor.

Mở bản Markdown cho AI
Hãy đọc docs/AI-CONTEXT.md trước và tích hợp ứng dụng hiện tại với PHP SSO Service theo OAuth 2.0 Authorization Code Flow và OpenID Connect. Kiểm tra framework và session system của ứng dụng client; triển khai login route, callback route, state validation, PKCE nếu là public client, token exchange, UserInfo request và tạo session nội bộ. Dùng biến môi trường cho SSO_BASE_URL, CLIENT_ID, CLIENT_SECRET và REDIRECT_URI. Không sửa source code của SSO Service, không commit hoặc log secret/token, không thay đổi OAuth contract, và bổ sung hướng dẫn cấu hình cùng kiểm thử.
Tài liệu Khắc Phục Sự Cố

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_id trong 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ới https://), 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ị state và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ửi client_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"
Cập nhật gần nhất: Tháng 10, 2025
Lên đầu trang