Xác thực OAuth 2.0

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Tài liệu này mô tả các điểm cuối mà bạn gọi để thực hiện dòng lệnh xác nhận OAuth 2.0, cũng như các điểm cuối khác hữu ích để thực hiện xác thực trong ứng dụng của bạn.

Base URL

https://apis.roblox.com/oauth
Endpoints

GET v1/authorize
POST v1/token
POST v1/token/introspect
POST v1/token/resources
POST v1/token/revoke
GET v1/userinfo
GET .well-known/openid-configuration

Xác nhận

GET v1/authorize

Nhận được sự cho phép từ người dùng để xác thực với tài khoản Roblox của họ. mong đợi một URL xác nhận hợp lệ được xây dựng với các tham số được định nghĩa.Điểm cuối này hỗ trợ xác nhận PKCE.

Tham số truy vấn

TênYêu cầuVí dụ
client_idID khách hàng của ứng dụng.yes816547628409595165403873012
redirect_uriURL mà người dùng được chuyển lại sau khi hoàn thành dòng xác nhận.yeshttps://www.roblox.com/example-redirect
phạm vi yêu cầuCác phạm vi yêu cầu, không gian được phân tách.Sử dụng phạm vi openid để nhận một token ID.Sử dụng phạm vi openidprofile để lấy thêm thông tin người dùng.yesopenid profile
response_typeCác tính năng xác thực mà ứng dụng muốn trả lại.Mặc định là đánh máycho phép mã xác thực.yesnone , code
promptXác định các trang xác minh và chấp thuận nào sẽ được hiển thị cho người dùng.Một số màn hình là bắt buộc đối với ứng dụng bên thứ ba và không thể bỏ qua.nonone , login , consent , select_account
nonceSố khóa mã hóa mà gắn token với khách hàng.no<random_value_1>
trạng tháiMột giá trị mờ mịt ngăn chặn cuộc tấn công lừa đảo trang web, một loại cuộc tấn công có hại.Trả lại ứng dụng sau khi được xác nhận.no<app-provided-opaque-value>
code_challengeChuỗi kết quả áp dụng code_challenge_method đến code_verifier .noBase64-URL-encoded chuỗi
code_challenge_methodChức năng được áp dụng cho code_verifier .khôngS256

Yêu cầu

Example Request of Directing to Authorization Flow

https://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 được chuyển hướng đến URL chuyển hướng được chỉ định với mã xác nhận trong một tham số truy vấn code .Mã xác nhận:

  • Có thời gian sống một phút.
  • Chỉ có thể được nhận một lần.
  • Không hợp lệ sau khi sử dụng một lần.

Trao trao đổitoken

Để lấy token để truy cập API, trao đổi một mã xác nhận cho một bộ token bí mật.Tất cả các điểm cuối token hỗ trợ hai loại xác thực khách hàng:

  1. HTTP Basic Authentication Scheme với một tiêu đề xác nhận: Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. ID khách hàng và bí mật trong thân yêu cầu như tham số.

Danh sách sau đây mô tả các token khác nhau bạn nhận được từ điểm cuối này.

  • Token truy cập - Đại diện cho quyền xác nhận từ một người tạo hoặc người dùng cho một ứng dụng bên thứ ba để truy cập các tài nguyên Roblox bảo mật của họ.Đó là một chuỗi để đánh dấu một phạm vi cụ thể, thời gian sống và các thuộc tính truy cập khác.Một khi máy chủ xác thực của Roblox phát hành một token truy cập cho một ứng dụng, token:

    • Hợp lệ trong 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 hóa trước khi hết hạn nếu người dùng ứng dụng thu hồi quyền xác nhận.
  • Làm mới token - Làm mới phiên xác nhận.Một ứng dụng có thể sử dụng token làm mới để lấy một bộ mới các token, bao gồm một token truy cập, một token làm mới và một token ID.Một token làm mới:

    • Hợp lệ trong 90 ngày.
    • Chỉ có thể sử dụng một lần trước khi hết hạn để làm mới token.
    • Có thể bị vô hiệu hóa trước khi hết hạn nếu người dùng ứng dụng thu hồi quyền xác nhận.
  • Token ID - Cung cấp bằng chứng rằng danh tính của người dùng đã được xác minh.Nội dung của nó phụ thuộc vào phạm vi được yêu cầu và có thể chứa thông tin người dùng cơ bản, bao gồm tên hiển thị Roblox của người dùng và tên tài khoảndùng.Token ID chỉ dành cho mục đích xác minh 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 bộ token với một mã xác nhận.

Yêu cầu

(x-www-form-urlencoded)

| Chìa khóa | Giá trị | | --------- | ------------- | ------------------ | | code | | | code_verifier | | | grant_type | authorization_code | | client_id | | | client_secret | | | client_secret |

|

Ví dụ Yêu cầu Nhận token

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ụ nhận được phản hồi token

{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}

POST v1/token

Nhận một bộ token với một token làm mới.

Yêu cầu

(x-www-form-urlencoded)

Chìa khóaGiá trị
grant_typerefresh_token
refresh_token<refresh_token>
client_id<client_id>
client_secret<client_secret>
Yêu cầu làm mới token ví dụ

curl --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

Yêu cầu làm mới token ví dụ

{
"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 token.Xác minh xem token có hiện đang hợp lệ và chưa hết hạn hay chưa.Hữu ích cho xác nhận vô chủ.Chỉ sử dụng nếu API bạn đang truy cập không yêu cầu tài nguyên, chẳng hạn như API Tài sản, hoặc nếu bạn chỉ muốn xem các yêu sách cụ thể của token.

Yêu cầu

(x-www-form-urlencoded)

Chìa khóaGiá trị
token<access_token> , <refresh_token> hoặc <id_token>
client_id<client_id>
client_secret<client_secret>
Yêu cầu token nhìn nhận ví dụ

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 Token Introspect

{
"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ột token có thể truy cập một tài nguyên cụ thể bằng cách nhận danh sách tài nguyên người dùng mà người dùng đã cho phép.Điều này hữu ích cho xác nhận có trạng thái.

Yêu cầu

(x-www-form-urlencoded)

Chìa khóaGiá trị
token<access_token>
client_id<client_id>
client_secret<client_secret>
Ví dụ Yêu cầu Tài nguyên Token Nhận

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 thấy rằng một phạm vi đã cho phép truy cập vào tài nguyên thuộc về người xác nhận owner .

Ví dụ nhận được phản hồi tài nguyên token

{
"resource_infos": [
{
"owner": {
"id": "1516563360",
"type": "User"
},
"resources": {
"universe": {
"ids": ["3828411582"]
},
"creator": {
"ids": ["U"]
}
}
}
]
}

POST v1/token/revoke

Thu hồi phiên xác nhận bằng cách sử dụng token làm mới cung cấp.

Yêu cầu

(x-www-form-urlencoded)

Chìa khóaGiá trị
token<refresh_token>
client_id<client_id>
client_secret<client_secret>
Yêu cầu rút lại token ví dụ

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 một 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 métadữ liệu người dùng khác.

Yêu cầu

Tiêu đề xác nhận : Authorization: Bearer <access_token>

Ví dụ Yêu cầu thông tin người dùng

curl --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ị của Roblox, vì vậy đừng sử dụng chúng như nhận dạng duy nhất để tham chiếu đến người dùng trên ứng dụng của bạn.

NhậnMô tả
subID người dùng Roblox.
têntên hiển thịhiển thị Roblox.
nicknametên hiển thịhiển thị của Roblox.
preferred_usernameTên người dùng Roblox.
created_atThời gian tạo tài khoản Roblox như một thời gian Unix.
hồ sơURL hồ sơ tài khoản Roblox.
hình ảnhHình ảnh bắn đầu avatar Roblox.Có thể là null nếu hình ảnh bắn đầu avatar 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/Hình đầu Avatar/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 các chi tiết về cấu hình Open Cloud, bao gồm một 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ó để tìm thông tin dinamically về các điểm cuối Open Cloud OAuth 2.0 và cấu hình, chẳng hạn như điểm xác nhận, điểm token và bộ cài đặtcông cộng.

Sau khi lấy lại và truy cập Tài liệu Khám phá từ URL 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 minh thông tin, hoặc bạn có thể tạo bản đồ thư viện tùy chỉnh của riêng bạn để tự động hóa dòng công 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ìm kiếm đều tuân theo cùng một sơ đồ như phản hồi ví dụ dưới đây.

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/ashboard/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"
]
}