このドキュメントでは、OAuth 2.0 認証コードフローを実装するために呼び出すエンドポイント、およびアプリで認証を実装するための他のエンドポイントを説明します。
Base URL
https://apis.roblox.com/oauth
Endpoints
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。 | yes | 816547628409595165403873012 |
redirect_uri | ユーザーが完了した認証フローの後にリダイレクトされる URL。 | yes | https://www.roblox.com/example-redirect |
スコープ | リクエストされたスコープ、スペース区切り。openid スコープを使用して、ID トークンを受け取ります。openid と profile スコープを使用して、より多くのユーザー情報を取得します。 | yes | openid profile |
response_type | アプリが返したいクレデンシャル。デフォルトは認可コード付与タイプです。 | yes | none , code |
prompt | ユーザーに表示される認証と同意ページを指定します。一部の画面は、サードパーティアプリに必要であり、スキップすることはできません。 | no | none , login , consent , select_account |
nonce | クライアントとトークンを結合する暗号化番号。 | no | <random_value_1> |
state | 曖昧な値は、サイト間リクエスト偽造を防ぐ、悪意のある攻撃のタイプです。認可後、アプリに戻されます。 | no | <app-provided-opaque-value> |
code_challenge | 結果の文字列を適用して code_challenge_method に code_verifier 。 | no | Base64-URL-encoded 文字列 |
code_challenge_method | code_verifier に適用される機能。 | いいえ | S256 |
リクエスト
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 クエリパラメータで認可コードを含む指定されたリダイレクト URL にリダイレクトされます。認証コード:
- 有効期限は 1 分です。
- 1 回のみ引き換えられます。
- 1 回使用後は無効です。
トークン交(を)交換
API にアクセスするためのトークンを取得するには、 認可コード を機密トークンのセットと交換します。すべてのトークンエンドポイントは、2 種類のクライアント認証をサポートします:
- 認可ヘッダーを持つ HTTP ベーシック認証スキーム: Authorization: Basic Base64 encoded(<client_id>:<client_secret>)。
- クライアント ID と秘密は、リクエスト体のパラメータとして。
次のリストは、このエンドポイントから受け取るさまざまなトークンを説明します。
アクセストークン - 第三者アプリが保護された Roblox リソースにアクセスするためのクリエイターまたはユーザーの認可を表します。特定のスコープ、期間、その他のアクセス属性を示す弦です。Roblox 認可サーバーがアプリにアクセストークンを発行したら、トークン:
- 15 分間有効です。
- 期限切れまで複数回使用できます。
- アプリユーザーが認可を取り消した場合、期限切れ前に無効化できます。
リフレッシュトークン - 認証セッションをリフレッシュする。アプリは、リフレッシュトークンを使用して、アクセストークン、リフレッシュトークン、および ID トークンを含む新しいトークンセットを取得できます。リフレッシュトークン:
- 90 日間有効です。
- 有効期限が切れる前には、トークンの更新を目的として使用できるのは一度だけです。
- アプリユーザーが認可を取り消した場合、期限切れ前に無効化できます。
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 がリソースを必要としない、またはトークンの特定の主張を見たいだけの場合にのみ使用します。Use only if the API you're accessing doesn't require a resource, such as Assets API, or if you just want to see specific claims of the token.
リクエスト
(x-www-form-urlencoded)
キー | 値 |
---|---|
トークン | <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'
応答
値 U に ids は、スコープが認可者 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_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。 |
名前 | Roblox ディスプレイ名。 |
ニックネーム | Roblox ディスプレイユーザーネーム。 |
preferred_username | Roblox ユーザー名。 |
created_at | Roblox アカウントの作成時間を Unix タイムスタンプとして作成しました。 |
プロフィール | Roblox アカウントプロフィール URL。 |
写真 | 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/03df2a9abe7b1aacaaf93ea46d5c0646/150/150/AvatarHeadshot/Png"
}
プロフィールスコープなしのユーザーの例
{
"sub": "1516563360"
}
発見
OpenID Connect (OIDC) 発見ドキュメントは、オープンクラウド構成の詳細に関するメタデータを含む JSON ドキュメントで、サポートされる身分に関連するスコープと主張のリストが含まれています。認可エンドポイント、トークンエンドポイント、公開キーセットなどのオープンクラウド 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/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"
]
}