Tài liệu này mô tả các điểm cuối mà bạn gọi để thực hiện luồng mã ủy quyền OAuth 2.0, cũng như các điểm cuối khác hữu ích cho việc triển khai xác thực trong các ứng dụng của bạn.
URL cơ bảnhttps://apis.roblox.com/oauth
Các điểm cuốiGET v1/authorizePOST v1/tokenPOST v1/token/introspectPOST v1/token/resourcesPOST v1/token/revokeGET v1/userinfoGET .well-known/openid-configuration
Ủy quyền
GET v1/authorize
Nhận ủy quyền từ người dùng để xác thực với tài khoản Roblox của họ. Hệ thống kỳ vọng một URL ủy quyền hợp lệ được xây dựng với các tham số đã chỉ định. Điểm cuối này hỗ trợ ủy quyền PKCE.
Các tham số truy vấn
| Tên | Mô tả | Bắt buộc | Ví dụ |
|---|---|---|---|
| client_id | ID client của ứng dụng. | có | 816547628409595165403873012 |
| redirect_uri | URL mà người dùng được chuyển hướng trở lại sau khi hoàn thành luồng ủy quyền. | có | `https://www.roblox.com/example-redirect`` |
| scope | Các phạm vi được yêu cầu, phân cách bằng khoảng trắng. Sử dụng phạm vi openid để nhận ID token. Sử dụng cả phạm vi openid và profile để có thêm thông tin người dùng. | có | openid profile |
| response_type | Các thông tin mà ứng dụng muốn nhận lại. Giá trị mặc định là loại cấp mã ủy quyền. | có | none, code |
| prompt | Chỉ định các trang xác thực và đồng ý nào được hiển thị cho người dùng. Một số màn hình là cần thiết cho các ứng dụng bên thứ ba và không thể bị bỏ qua. | không | none, login, consent, select_account |
| nonce | Số ngẫu nhiên mã hóa để liên kết token với client. | không | <random_value_1> |
| state | Một giá trị mờ đục ngăn chặn giả mạo yêu cầu giữa các trang, một loại cuộc tấn công độc hại. Được gửi lại cho ứng dụng sau khi ủy quyền. | không | <app-provided-opaque-value> |
| code_challenge | Chuỗi kết quả của việc áp dụng code_challenge_method vào code_verifier. | không | Chuỗi được mã hóa Base64-URL |
| code_challenge_method | Hàm được áp dụng cho code_verifier. | không | S256 |
Yêu cầu
Ví dụ Yêu cầu Chuyển hướng đến Luồng Ủy quyềnhttps://apis.roblox.com/oauth/v1/authorize?client_id=816547628409595165403873012&redirect_uri=https://my-app.com/redirect&scope=openid&response_type=code&nonce=12345&state=6789
Phản hồi
Sau khi gọi điểm cuối này, người dùng sẽ được chuyển hướng đến URL chuyển hướng đã chỉ định với mã ủy quyền trong tham số truy vấn code. Mã ủy quyền:
- Có thời gian sử dụng một phút.
- Chỉ có thể được đổi một lần.
- Không hợp lệ sau một lần sử dụng.
Trao đổi mã
Để nhận mã truy cập API, hãy trao đổi một mã ủy quyền nhận được lấy một tập hợp mã bí mật. Tất cả các điểm cuối mã hỗ trợ hai loại xác thực client:
- HTTP Basic Authentication Scheme với một tiêu đề xác thực: Authorization: Basic Base64 encoded(<client_id>:<client_secret>).
- ID client và mật khẩu trong thân yêu cầu dưới dạng tham số.
Danh sách sau mô tả các mã khác nhau mà bạn nhận được từ điểm cuối này.
Mã truy cập - Đại diện cho sự ủy quyền từ một nhà phát triển hoặc người dùng cho một ứng dụng bên thứ ba truy cập vào tài nguyên Roblox được bảo vệ của họ. Đây là một chuỗi chỉ định một phạm vi cụ thể, thời gian sống và các thuộc tính truy cập khác. Khi máy chủ ủy quyền Roblox phát hành một mã truy cập cho một ứng dụng, mã này:
- Có thời gian sử dụng 15 phút.
- Có thể được sử dụng nhiều lần trước khi hết hạn.
- Có thể bị vô hiệu trước khi hết hạn nếu người dùng ứng dụng thu hồi ủy quyền.
Mã làm mới - Cập nhật một phiên ủy quyền. Một ứng dụng có thể sử dụng mã làm mới để nhận một tập hợp mã mới, bao gồm mã truy cập, mã làm mới và ID token. Mã làm mới:
- Có thời gian sử dụng 90 ngày.
- Chỉ có thể được sử dụng một lần trước khi hết hạn để làm mới các mã.
- Có thể bị vô hiệu trước khi hết hạn nếu người dùng ứng dụng thu hồi ủy quyền.
ID token - Cung cấp bằng chứng rằng danh tính của người dùng đã được xác thực. Nội dung của nó phụ thuộc vào các phạm vi được yêu cầu và có thể chứa thông tin cơ bản về người dùng, bao gồm tên hiển thị và tên người dùng Roblox của người dùng. ID token chỉ được dùng để xác thực danh tính và không cung cấp quyền truy cập vào bất kỳ tài nguyên Roblox nào.
POST v1/token
Nhận một tập hợp mã với một mã ủy quyền.
Yêu cầu
(x-www-form-urlencoded)
| Khóa | Giá trị |
|---|---|
| code | <mã ủy quyền> |
| code_verifier | <giá trị xác thực pkce> |
| grant_type | authorization_code |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ví dụ Yêu cầu Nhận Mãcurl --location --request POST 'https://apis.roblox.com/oauth/v1/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L' \--data-urlencode 'grant_type=authorization_code' \--data-urlencode 'code=yCnq4ofX1...XmGpdx'
Phản hồi
Ví dụ Phản hồi Nhận Mã
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token
Nhận một tập hợp mã với một mã làm mới.
Yêu cầu
(x-www-form-urlencoded)
| Khóa | Giá trị |
|---|---|
| grant_type | refresh_token |
| refresh_token | <refresh_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ví dụ Yêu cầu Mã Làm Mớicurl --location --request POST 'https://apis.roblox.com/oauth/v1/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'grant_type=refresh_token' \--data-urlencode 'refresh_token=Ujfstayclfdlbm...BGydlsnU' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L'
Phản hồi
Ví dụ Phản hồi Nhận Mã Làm Mới
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token/introspect
Nhận thông tin về một mã. Xác minh xem mã có hợp lệ và chưa hết hạn hay không. Hữu ích cho việc xác thực không trạng thái. Sử dụng chỉ khi API mà bạn đang truy cập không yêu cầu một tài nguyên, chẳng hạn như API Tài sản, hoặc nếu bạn chỉ muốn thấy các yêu cầu cụ thể của mã.
Yêu cầu
(x-www-form-urlencoded)
| Khóa | Giá trị |
|---|---|
| token | <access_token>, <refresh_token> hoặc <id_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ví dụ Yêu cầu Xem Mãcurl --location --request POST 'https://apis.roblox.com/oauth/v1/token/introspect' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'token=eyjlflabtfl...4gxqYBG' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L'
Phản hồi
Ví dụ Phản hồi Xem Mã
{
"active": true,
"jti": "RT.2GcjvTduKzk6QY9tjTfm",
"iss": "https://apis.roblox.com/oauth/",
"token_type": "Bearer",
"client_id": "840974200211308101",
"aud": "4239311013248676173",
"sub": "1516563360",
"scope": "universe-messaging-service:publish",
"exp": 1676394509,
"iat": 1660842510
}
POST v1/token/resources
Kiểm tra xem mã có thể truy cập vào một tài nguyên cụ thể hay không bằng cách nhận danh sách các tài nguyên của người dùng mà người dùng đã cho phép. Điều này hữu ích cho việc xác thực có trạng thái.
Yêu cầu
(x-www-form-urlencoded)
| Khóa | Giá trị |
|---|---|
| token | <access_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ví dụ Yêu cầu Nhận Tài Nguyên Mãcurl --location --request POST 'https://apis.roblox.com/oauth/v1/token/resources' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'token=eyjlflabtfl...4gxqYBG' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L'
Phản hồi
Giá trị U trong ids cho biết rằng một phạm vi đã cấp quyền truy cập vào một tài nguyên thuộc sở hữu của owner ủy quyền.
Ví dụ Phản hồi Nhận Tài Nguyên Mã
{
"resource_infos": [
{
"owner": {
"id": "1516563360",
"type": "User"
},
"resources": {
"universe": {
"ids": ["3828411582"]
},
"creator": {
"ids": ["U"]
}
}
}
]
}
POST v1/token/revoke
Thu hồi một phiên ủy quyền sử dụng mã làm mới đã cung cấp.
Yêu cầu
(x-www-form-urlencoded)
| Khóa | Giá trị |
|---|---|
| token | <refresh_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ví dụ Yêu cầu Thu Hồi Mãcurl --location --request POST 'https://apis.roblox.com/oauth/v1/token/revoke' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'token=Ujfstayclfdlbm...BGydlsnU' \--data-urlencode 'client_id=840974200211308101' \--data-urlencode 'client_secret=RBX-CR9...St12L'
Phản hồi
200 OK với phản hồi trống
Thông tin Người dùng
GET /v1/userinfo
Nhận ID người dùng Roblox và các siêu dữ liệu người dùng khác.
Yêu cầu
Tiêu đề xác thực: Authorization: Bearer <access_token>
Ví dụ Yêu cầu Nhận Thông Tin Người Dùngcurl --location --request GET 'https://apis.roblox.com/oauth/v1/userinfo' \--header 'Authorization: Bearer eyjlflabtfl...4gxqYBG'
Phản hồi
Bạn có thể sử dụng giá trị sub để xác định duy nhất người dùng. Người dùng có thể thay đổi tên người dùng và tên hiển thị trên Roblox của họ, vì vậy đừng sử dụng chúng như những định danh duy nhất để tham chiếu đến người dùng trên ứng dụng của bạn.
| Khẳng định | Mô tả |
|---|---|
| sub | ID người dùng Roblox. |
| name | Tên hiển thị Roblox. |
| nickname | Tên hiển thị Roblox. |
| preferred_username | Tên người dùng Roblox. |
| created_at | Thời gian tạo tài khoản Roblox dưới dạng dấu thời gian Unix. |
| profile | URL hồ sơ tài khoản Roblox. |
| picture | Hình đại diện của Roblox. Có thể là null nếu hình đại diện chưa được tạo hoặc đã bị kiểm duyệt. |
Ví dụ Người Dùng với Phạm Vi Hồ Sơ
{
"sub": "1516563360",
"name": "exampleuser",
"nickname": "exampleuser",
"preferred_username": "exampleuser",
"created_at": 1584682495,
"profile": "https://www.roblox.com/users/1516563360/profile",
"picture": "https://tr.rbxcdn.com/03dc2a9abe7b1aacaaf93ea46d5c0646/150/150/AvatarHeadshot/Png"
}
Ví dụ Người Dùng không có Phạm Vi Hồ Sơ
{
"sub": "1516563360"
}
Khám Phá
Tài liệu Khám Phá OpenID Connect (OIDC) là một tài liệu JSON chứa siêu dữ liệu về các chi tiết cấu hình Open Cloud, bao gồm danh sách các phạm vi và tuyên bố liên quan đến danh tính được hỗ trợ. Bạn có thể sử dụng nó để khám phá động thông tin về các điểm cuối OAuth 2.0 và cấu hình Open Cloud, chẳng hạn như điểm cuối ủy quyền, điểm cuối mã, và bộ khóa công khai.
Sau khi truy xuất và lấy Tài liệu Khám Phá từ URI tài liệu Khám Phá, bạn có thể kiểm tra thủ công các trường trong phản hồi để xác thực thông tin, hoặc bạn có thể tạo thư viện tùy chỉnh của riêng mình để ánh xạ các trường trong lược đồ phản hồi để tự động hóa quy trình làm việc của bạn.
GET .well-known/openid-configuration
Phản hồi
Tất cả các phản hồi Tài liệu Khám Phá theo cùng một cấu trúc như phản hồi ví dụ sau.
Ví dụ Phản hồi Tài liệu Khám Phá
{
"issuer": "https://apis.roblox.com/oauth/",
"authorization_endpoint": "https://apis.roblox.com/oauth/v1/authorize",
"token_endpoint": "https://apis.roblox.com/oauth/v1/token",
"introspection_endpoint": "https://apis.roblox.com/oauth/v1/token/introspect",
"revocation_endpoint": "https://apis.roblox.com/oauth/v1/token/revoke",
"resources_endpoint": "https://apis.roblox.com/oauth/v1/token/resources",
"userinfo_endpoint": "https://apis.roblox.com/oauth/v1/userinfo",
"jwks_uri": "https://apis.roblox.com/oauth/v1/certs",
"registration_endpoint": "https://create.roblox.com/dashboard/credentials",
"service_documentation": "https://create.roblox.com/docs/reference/cloud",
"scopes_supported": [
"openid",
"profile",
"email",
"verification",
"credentials",
"age",
"premium",
"roles"
],
"response_types_supported": ["none", "code"],
"subject_types_supported": ["public"],
"id_token_signing_alg_values_supported": ["ES256"],
"claims_supported": [
"sub",
"type",
"iss",
"aud",
"exp",
"iat",
"nonce",
"name",
"nickname",
"preferred_username",
"created_at",
"profile",
"email",
"email_verified",
"verified",
"age_bracket",
"premium",
"roles",
"internal_user"
],
"token_endpoint_auth_methods_supported": [
"client_secret_post",
"client_secret_basic"
]
}