この文書では、OAuth 2.0 認可コードフローを実装するために呼び出すエンドポイントや、アプリでの認証を実装するのに役立つ他のエンドポイントについて説明します。
基本 URLhttps://apis.roblox.com/oauth
エンドポイントGET v1/authorizePOST v1/tokenPOST v1/token/introspectPOST v1/token/resourcesPOST v1/token/revokeGET v1/userinfoGET .well-known/openid-configuration
認可
GET v1/authorize
ユーザーからの認可を取得し、Roblox アカウントで認証します。 指定されたパラメーターを用いて構築された有効な認可 URL を期待します。このエンドポイントは PKCE 認可をサポートしています。
クエリパラメーター
| 名前 | 説明 | 必須 | 例 |
|---|---|---|---|
| client_id | アプリのクライアント ID。 | はい | 816547628409595165403873012 |
| redirect_uri | 認可フローの完了後にユーザーがリダイレクトされる URL。 | はい | `https://www.roblox.com/example-redirect`` |
| scope | 要求されたスコープ。スペースで区切って指定します。ID トークンを受け取るには openid スコープを使用します。ユーザー情報を取得するには openid と profile スコープを使用します。 | はい | openid profile |
| response_type | アプリが返されることを望む資格情報。デフォルトは認可コード付与タイプです。 | はい | none, code |
| prompt | ユーザーに表示される認証および同意ページを指定します。サードパーティのアプリには特定の画面が必要であり、スキップできません。 | いいえ | none, login, consent, select_account |
| nonce | トークンをクライアントに結びつける暗号化された数値。 | いいえ | <random_value_1> |
| state | クロスサイトリクエストフォージェリ、すなわち悪意のある攻撃を防ぐための不透明な値。認可後にアプリに返されます。 | いいえ | <app-provided-opaque-value> |
| code_challenge | code_verifier に code_challenge_method を適用した結果の文字列。 | いいえ | Base64-URLエンコードされた文字列 |
| code_challenge_method | code_verifier に適用される関数。 | いいえ | S256 |
リクエスト
認可フローへのリダイレクション要求の例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 クエリパラメーターに認可コードを含む指定されたリダイレクト URL にリダイレクトされます。 認可コードは次のようになります。
- 有効期限は1分です。
- 1回だけ引き換え可能です。
- 1回使用された後は無効になります。
トークンの交換
API へのアクセスを得るために 認可コード を一連の機密トークンに交換します。全てのトークンエンドポイントは二つのタイプのクライアント認証をサポートしています。
- 認可ヘッダーを使用した HTTP Basic 認証スキーム: Authorization: Basic Base64 encoded(<client_id>:<client_secret>)。
- リクエストボディ内のパラメーターとしてクライアント ID とシークレット。
以下のリストは、このエンドポイントから受け取るさまざまなトークンについて説明しています。
アクセストークン - クリエイターまたはユーザーがサードパーティアプリに自分の保護された Roblox リソースにアクセスするための認可を表します。特定のスコープ、有効期限、その他のアクセス属性を示す文字列です。Roblox 認可サーバーがアプリにアクセストークンを発行すると、このトークンは:
- 15 分間有効です。
- 有効期限が切れる前に何度でも使用できます。
- アプ利用者が認可を取り消すと、有効期限が切れる前に無効にできます。
リフレッシュトークン - 認可セッションを更新します。アプリはリフレッシュトークンを使用して新しいトークンセットを取得でき、これにはアクセストークン、リフレッシュトークン、および ID トークンが含まれます。リフレッシュトークンは:
- 90 日間有効です。
- トークンを更新するために有効期限が切れる前に1回だけ使用できます。
- アプ利用者が認可を取り消すと、有効期限が切れる前に無効にできます。
ID トークン - ユーザーの身元が認証されたことの証明を提供します。その内容は要求されたスコープによって異なり、ユーザーの 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 | <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> |
| client_secret | <client_secret> |
リフレッシュトークンリクエストの例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 がリソースを必要としない場合(たとえば、Assets API)や、特定のトークンのクレームを確認したい場合のみに使用してください。
リクエスト
(x-www-form-urlencoded)
| キー | 値 |
|---|---|
| token | <access_token>, <refresh_token> または <id_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
トークンイントロスペクトリクエストの例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'
レスポンス
トークンイントロスペクトレスポンスの例
{
"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'
レスポンス
ids 内の値 U は、スコープが認可したリソースへのアクセスを付与したことを示します。
トークンリソース取得レスポンスの例
{
"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_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 ユーザー名やディスプレイ名を変更できるため、アプリ内でユーザーを参照するための一意の識別子として使用しないでください。
| クレーム | 説明 |
|---|---|
| sub | Roblox ユーザー ID。 |
| name | Roblox ディスプレイ名。 |
| nickname | Roblox ディスプレイ名。 |
| preferred_username | Roblox ユーザー名。 |
| created_at | Roblox アカウントの作成時刻(Unix タイムスタンプ)。 |
| profile | Roblox アカウントのプロフィール URL。 |
| picture | Roblox アバターのヘッドショット画像。アバターのヘッドショット画像がまだ生成されていないか、モデレートされている場合は null になることがあります。 |
プロフィールスコープを持つユーザーの例
{
"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"
}
プロフィールスコープを持たないユーザーの例
{
"sub": "1516563360"
}
ディスカバリー
OpenID Connect (OIDC) ディスカバリードキュメントは、Open Cloud の構成詳細に関するメタデータを含む JSON ドキュメントで、サポートされているアイデンティティ関連のスコープやクレームのリストが含まれています。これを使用して、Open Cloud OAuth 2.0 のエンドポイントや構成について動的に情報を取得できます(たとえば、認可エンドポイント、トークンエンドポイント、および公開鍵セットなど)。
ディスカバリードキュメント URI からディスカバリードキュメントを取得した後、応答内のフィールドを手動で検査して情報を検証するか、応答スキーマ内のフィールドにマッピングするカスタムライブラリを作成してワークフローを自動化することができます。
GET .well-known/openid-configuration
レスポンス
すべてのディスカバリードキュメントレスポンスは、以下の例のレスポンスと同じスキーマに従います。
ディスカバリードキュメントレスポンスの例
{
"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"
]
}