Xác thực
OAuth 2.0 Client Credentials, quyền truy cập và vòng đời của mã.
Lấy mã truy cập
- Địa chỉ:
POST https://<trường>.<tên-miền-nền-tảng>/oauth/token - Dạng gửi:
application/x-www-form-urlencoded(khuyên dùng, theo OAuth 2.0) hoặc JSON, vớigrant_type=client_credentials. - Thông tin kết nối: gửi
client_idvàclient_secretbằng HTTP Basic (khuyên dùng), hoặc trong thân yêu cầu. scope(không bắt buộc): các quyền cần, cách nhau bởi dấu cách. Bỏ trống thì nhận mọi quyền của kết nối.
curl -u "CLIENT_ID:CLIENT_SECRET" \
-d "grant_type=client_credentials" \
-d "scope=https://purl.imsglobal.org/spec/or/v1p2/scope/roster.readonly" \
https://<trường>.<tên-miền-nền-tảng>/oauth/tokenPhản hồi có tiêu đề Cache-Control: no-store. Gọi API kèm tiêu đề Authorization: Bearer <access_token>.
Quyền
| Quyền (scope) | Cho phép đọc |
|---|---|
https://purl.imsglobal.org/spec/or/v1p2/scope/roster-core.readonly | Mọi điểm truy cập Danh sách |
https://purl.imsglobal.org/spec/or/v1p2/scope/roster.readonly | Mọi điểm truy cập Danh sách |
https://purl.imsglobal.org/spec/or/v1p2/scope/gradebook.readonly | Mọi điểm truy cập Kết quả |
Khi tạo kết nối, nhà trường chọn "Danh sách" (roster) và/hoặc "Kết quả thực tập" (gradebook).
Vòng đời của mã
- Mã truy cập có hạn 1 giờ. Hết hạn thì xin mã mới; không có mã làm mới (refresh token).
- Mã chỉ dùng được ở đúng trường đã cấp.
- Nhà trường thu hồi kết nối thì mọi mã đã cấp ngừng hoạt động ngay. Muốn dùng tiếp phải tạo kết nối mới.
- Nhà trường có thể đặt thời hạn cho kết nối (30, 90, 180, 365 ngày, hoặc không hết hạn) và giới hạn địa chỉ mạng được gọi.
- Khoá bí mật chỉ hiện một lần lúc tạo. Mất khoá thì nhà trường bấm Thay khoá để cấp khoá mới; khoá cũ còn dùng được 24 giờ.
- Kết nối loại mã truy cập (
ttdn_pat_...) gọi thẳng API OneRoster bằngAuthorization: Bearer, không cần bước lấy mã. Xem API của cổng.
Không gửi khoá bí mật qua tin nhắn hay email không mã hoá, và không đưa vào mã nguồn. Lưu ở nơi giữ bí mật của hệ thống (biến môi trường, kho khoá).
Lỗi khi lấy mã
Theo OAuth 2.0 (RFC 6749):
| Mã HTTP | error | Khi nào |
|---|---|---|
| 401 | invalid_client | Sai mã ứng dụng hoặc khoá bí mật, kết nối đã thu hồi, hoặc kết nối của trường khác |
| 400 | unsupported_grant_type | grant_type khác client_credentials |
| 400 | invalid_scope | Xin quyền mà kết nối không có |
| 429 | slow_down | Quá 60 lần lấy mã trong 15 phút từ cùng một địa chỉ mạng |
| 503 | temporarily_unavailable | Hệ thống tạm thời không phản hồi; thử lại sau ít phút |