OAuth 2.0 身份认证

*此内容使用人工智能(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

从用户那里获得授权,用户帐户户认证。期待使用指定参数建立的有效授权 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

回应

调用此端口后,用户将被重新定向到指定的重新定向 URL,并且在 code 查询参数中使用授权代码。授权代验证码:

  • 有一个一分钟的生命时间。
  • 只能兑换一次。
  • 使用一次后无效。

代币交换

要获得可以访问 API 的代币,请交换一个 授权代码 以获取一组隐私代币。所有代币端点都支持两种客户端认证:

  1. HTTP Basic Authentication Scheme with an authorization header: Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. 客户端 ID 和秘密在请求体中作为参数。

下表描述您从此端口收到的各种代币。

  • 访问代币 - 代表创建者或用户对第三方应用程序访问他们的保护 Roblox 资源的授权。它是一个代表特定范围、生命时间和其他访问属性的字符串。当 Roblox 授权服务器发出访问代币给应用程App时,代币:

    • 有效期为 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 | 1> <

示例获取代币请求

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'

回应

示例获取代币资源回应

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

POST v1/token/revoke

使用提供的刷新代币撤销授权会话。

请求

(x-www-form-urlencoded)

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

示例撤销代币请求

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>

示例获取用户信息请求

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"
}

发现

OpenID Connect (OIDC) 发现文档是一个 JSON 文档,包含关于 Open Cloud 配置详细信息的金属属性描述,包括一个列表 of identity-related scopes 和声称支持的公钥。您可以使用它来动态发现关于 Open Cloud OAuth 2.0 端点和配置的信息,例如授权端、代币端和公钥设置。

从发现文件中获取和获取 Discovery 文档的 Discovery 文件 URL 后,您可以手动检查字段在回应中验证信息,或者您可以创建自己的自定义图书馆地图到回应中的字段,以自动化您的工作流程。

GET .well-known/openid-configuration

回应

所有发现文档的答复都遵循以下示例的 schema。

示例发现文档响应

{
"issuer": "https://apis.roblox.com/oauth/",
"authorization_endpoint": "https://apis.roblox.com/oauth/v1/授权"
"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://创建 or 创作reate.roblox.com/ashboard/credentials"
"service_documentation": "https://创创建 or 创作。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"
]
}