OAuth 2.0 驗證

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

這個文件描述您呼叫的端口,以實現 OAuth 2.0 授權碼流程,以及其他端口有助於在您的應用中實現驗證。

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

授權

GET v1/authorize

獲得用戶的授權來與他們的 Roblox 帳號戶進行認證。期待建立具有指定參數的正確的授權 URL。此端口支援 PKCE 授權。

查詢參數

您的帳號已

請求

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

回應

呼叫此端口後,使用者會被重新導至指定的重新導向網頁,並且在 code 查詢參數中提供授權代碼。授權代碼:

  • 有一個永久的一分鐘。
  • 只能兌換一次。
  • 使用一次後無效。

代幣交換

要獲得可以存取 API 的代幣,請交換一個 授權代碼 以取得一組私密代幣。所有代幣端點都支持兩種客戶端認證類型:

  1. HTTP 基本授權方式,包括授權頭銜: Authorization: Basic Base64 encoded(<client_id>:<client_secret>)
  2. 客戶端 ID 和秘密在要求體中作為參數。

下列列表描述您從此端口收到的各種代幣。

  • 存取代幣 - 代表創作者或用戶對第三方應用程序存取受保護的 Roblox 資源的授權。它是一個表示特定範圍、生命時間和其他存取屬性的字串。當 Roblox 授權服務器發出存取代幣時,代幣會發出:

    • 有效 15 分鐘。
    • 可以在它過期前重複使用。
    • 如果應用程式使用者取消授權,它就會在過期前被取消。
  • 重新整理代幣 - 重新整理授權會作業。一個應用程序可以使用重新整理代幣來取得新的代幣組,其中包括一個存取代幣、一個重新整理代幣和一個 ID 代幣。一個重新整理代幣:

    • 有效 90 天。
    • 只能在它過期前一次使用來更新代幣。
    • 如果應用程式使用者取消授權,它就會在過期前被取消。
  • ID Token - 提供使用者的身份有效的證明。其內容依據要求的範圍而依據,可包含基本使用者信息,包括使用者的 Roblox 顯示名稱和使用者名稱。 ID 代幣僅用於身份認證目的,並且不提供對任何 Roblox 資源的存取。

POST v1/token

獲得具有授權代碼的一組代幣。

請求

(x-www-form-urlencoded)

| 鑰匙 | 值 | | -------------- | ---------------- | | code | <authorization code> | | code_verifier | <pkce code verifier value> | | grant_type | authorization_code | | client_id | <client_id> | | client_secret |

範例取得代幣請求

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'

回應

範例取得代幣回應

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

POST v1/token

獲得一個更新代幣的套裝。

請求

(x-www-form-urlencoded)

| 鑰匙 | 值 | | -------------- | ----------------- | | grant_type | refresh_ token | | refresh_ token | <refresh_token> | | client_id | | <client_id> |

範例更新代幣請求

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'

回應

範例更新代幣請求

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

POST v1/token/introspect

收到代幣的信息。 它是否代幣是否現在有效,並且還沒有過期。 對於無狀態的驗證有幫助。 只要使用您正在使用的 API 不需要資源,例如資產 API,或者您只是想要查看特定代幣的領取。

請求

(x-www-form-urlencoded)

| 鑰匙 | 值 | | -------------- | ---------------- --- | | token | <access_token> , <refresh_token><id_token> | | client_id | 1> <客戶端_id>1> |

範例Introspect代幣請求

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'

回應

範例 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

檢查代幣是否可以存取特定資源,並獲得用戶資源列表,用戶給權限的資源。這很有用於狀態有效驗證。

請求

(x-www-form-urlencoded)

| 鑰匙 | 值 | | -------------- | ----------------- | | token | <access_token> | | client_id | <client_id> | | client_secret | <client_secret> |

範例取得代幣資源請求

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'

回應

Uids 指示資格 owner 的資源。

範例取得代幣資源回應

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

POST v1/token/revoke

使用提供的重新整理代幣來重新整理授權會話。

請求

(x-www-form-urlencoded)

| 鑰匙 | 值 | | -------------- | ----------------- | | token | <refresh_token> | | client_id | | client_secret | <client_id>

範例「撤回代幣請求」

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'

回應

200 OK 以空白的回應

用戶信息

GET /v1/userinfo

獲取 Roblox 用戶 ID 和其他用戶資料。

請求

授權標題 : Authorization: Bearer <access_token>

範例 Get User Info Request

curl --location --request GET 'https://apis.roblox.com/oauth/v1/userinfo' \
--header 'Authorization: Bearer eyjlflabtfl...4gxqYBG'

回應

您可以使用 sub 值來識別使用者。用戶可以變更他們的 Roblox 使用者名稱和顯示名稱,因此不要將它們作為唯一的識別符來參照您的應用程App上的用戶。

| 領取 | 說明 | | 列表 | 列表 | 顯示名稱 | | 子 | 顯示名稱 | 列表 | 列

個人資料範圍的使用者範例

{
"sub": "1516563360",
"name": "exampleuser",
"nickname": "exampleuser",
"preferred_username": "exampleuser",
"created_at": 1584682495,
"profile": "https://www.roblox.com/用戶/1516563360/個人檔案",
"picture": "https://tr.rbxcdn.com/03dc2a9abe7b1aacaaf93ea46d5c0646/150/150/虛擬人偶頭像擊中/Png"
}
沒有帳號的用戶範例

{
"sub": "1516563360"
}

發現

開啟ID連接(OIDC)發現文件是一個JSON文件,包含關於開放雲端配置細節的金屬資料,包括一個列關於身份相關範圍和要求的列表。您可以使用它來動態發現關於Open Cloud OAuth 2.0端點和配置的信息,例如授權端、代幣端和公鑰設設定。

從 Discovery 文件載入和取得發現文件的 Discovery 文件資料後,您可以手動檢查檢索文件中的字段來確認信息,或者您可以創建自己的自訂圖書館映射到回應中的字段來自動化您的工作流程。

GET .well-known/openid-configuration

回應

所有發現文件回應都遵循以下示例回應的 schema。

範例發現文件回應

{
"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/資源」,
"userinfo_endpoint": "https://apis.roblox.com/oauth/v1/userinfo"
"jwks_uri": "https://apis.roblox.com/oauth/v1/certs"
"registration_endpoint": "https://建立、創作reate.roblox.com/dash/credentials"
"service_documentation": "https://建立、創作reate.roblox.com/docs/reference/雲端",
"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"
]
}