Authentification OAuth 2.0

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Ce document décrit les points d'extrémité que vous appelez pour implémenter le flux de code d'autorisation OAuth 2.0, ainsi que d'autres points d'extrémité utiles pour l'implémentation de l'authentification dans vos applications.

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

Authentification

GET v1/authorize

Obtient l'autorisation de l'utilisateur pour s'authentifier avec son compte Roblox. Attend une URL d'autorisation valide construite avec les paramètres spécifiés. Ce point d'extrémité prend en charge l'autorisation PKCE.

Paramètres de requête

Anglais: N

Requête

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

Réponse

Après avoir appelé cet endpoint, l'utilisateur est redirige vers l'URL de redirection spécifiée avec le code d'autorisation dans une code requête paramètre. Le code d'autorisation :

  • A une durée de vie d'une minute.
  • Ne peut être utilisé qu'une fois.
  • Est invalide après un usage.

Échange de jetons

Pour obtenir des jetons pour accéder aux API, échangez un code d'autorisation pour un ensemble de jetons confidentiels. Tous les points d'autorisation des jetons supportent deux types d'authentification client :

  1. Http Basic Authentification du schéma avec une balise d'autorisation : Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. ID du client et secret dans le corps de la demande en tant que paramètres.

La liste suivante décrit les différents jetons que vous recevez de cet endpoint.

  • jeton d'accès représente l'autorisation d'un créateur ou d'un utilisateur pour qu'une application tiers accède à leurs ressources Roblox protégées. C'est une chaîne dénommant un champ d'application, une durée de vie et d'autres attributs d'accès. Une fois que le serveur d'autorisation Roblox émet un jeton d'accès à une application, le jeton :

    • est valide pendant 15 minutes.
    • Peut être utilisé plusieurs fois avant qu'il expire.
    • Peut être annulé avant son expiration si un utilisateur d'application révoque l'autorisation.
  • jeton de rafraîchissement - Rafraîchit une session d'autorisation. Une application peut utiliser le jeton de rafraîchissement pour obtenir un nouveau ensemble de jetons, qui inclut un jeton d'accès, un jeton de rafraîchissement et un jeton d'identifiant. Un jeton de rafraîchissement :

    • est valable pendant 90 jours.
    • Ne peut être utilisé qu'une fois avant qu'il expire pour rafraîchir les jetons.
    • Peut être annulé avant son expiration si un utilisateur d'application révoque l'autorisation.
  • jeton d'identifiant - Fournit des preuves que l'identité d'un utilisateur a été authentifiée. Son contenu dépend des scopes demandés et peut contenir des informations de base sur l'utilisateur, y compris le nom de l'afficheur Roblox et le nom d'utilisateur. Le jeton d'identifiant n'est que pour les besoins d'authentification d'identifiant et ne fournit pas d'accès à toutes les ressources Roblox.

POST v1/token

Obtenez un ensemble de jetons avec un code d'autorisation.

Requête

(x-www-form-urlencoded)

| Clé | Valeur | | -------------- | ---------------- | | code | <authorization code> | | code_verificateur | <pkce code verifier value> | | grant_type | autorization_code | | client_id | <client_id> | | client_secret | 1> <player_秘密>

Demande d'obtention d'un jeton d'exemple

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'

Réponse

Exemple de réponse de jeton d'obtention

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

POST v1/token

Obtenez un ensemble de jetons avec un jeton de mise à jour.

Requête

(x-www-form-urlencoded)

| Clé | Vale | | -------------- | ----------------- | | grant_type | refresh_ token | | refresh_ token | <refresh_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Demande de jeton de mise à jour d'exemple

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'

Réponse

Demande de jeton de mise à jour d'exemple

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

POST v1/token/introspect

Recevez des informations sur un jeton. Vérifiez si le jeton est actuellement valide et n'a pas expiré encore. Utile pour la validation stateless. Utilisez-le uniquement si l'API que vous accédez n'a pas besoin d'une ressource, telle que Assets API, ou si vous voulez simplement voir des réclamations spécifiques du jeton.

Requête

(x-www-form-urlencoded)

| Clé | Valeur | | -------------- | ---------------- | | jeton | | <access_token> , <refresh_ token>] ou <id_ token> | | client_id | 2> <client_id>2> | | client_secret | 5> <客户_秘密>]

Demande d'autorisation de jeton d'introspecte

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'

Réponse

Réponse de jeton d'introspecte d'exemple

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

Vérifiez si un jeton peut accéder à une ressource spécifique en obtenant la liste des ressources utilisateur que l'utilisateur a donné la permission d'accès. C'est utile pour la validation d'État.

Requête

(x-www-form-urlencoded)

| Clé | Vale | | -------------- | | token | <access_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Demande d'obtention de ressources de jeton d'exemple

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'

Réponse

Exemple de réponse des ressources du jeton d'exemple

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

POST v1/token/revoke

Révoquer une session d'autorisation en utilisant le jeton de rafraîchissement fourni.

Requête

(x-www-form-urlencoded)

| Clé | Vale | | -------------- | | jeton | <refresh_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Demande de jeton de révoque d'exemple

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'

Réponse

200 OK avec une réponse vide

Informations sur l'utilisateur

GET /v1/userinfo

Obtient l'ID de l'utilisateur Roblox et d'autres métadonnées de l'utilisateur.

Requête

En-tête d'autorisation : Authorization: Bearer <access_token>

Exemple de requête d'information sur l'utilisateur

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

Réponse

Vous pouvez utiliser la valeur sub pour identifier uniqueement l'utilisateur. Les utilisateurs peuvent modifier leur nom d'utilisateur Roblox et Nom d'affichaged'affichage, afin que vous ne les utilisiez pas comme identifiants uniques pour vous référer aux utilisateurs sur votre application.

| Recevoir | Description | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

Exemple d'utilisateur avec un champ de vision de profil

{
"sub": "1516563360",
"name": "exampleuser",
"nickname": "exampleuser",
"preferred_username": "exampleuser",
"created_at": 1584682495,
"profile": "https://www.roblox.com/utilisateurs/1516563360/profil",
"picture": "https://tr.rbxcdn.com/03dc2a9abe7b1aacaaf93ea46d5c0646/150/150/AvatarHeadshot/Png"
}
Exemple d'utilisateur sans profil

{
"sub": "1516563360"
}

Découverte

Le document de découverte OpenID Connect (OIDC) est un document JSON qui contient des métadonnées sur les détails de configuration Open Cloud, y compris une liste de scopes et de revendications liés à l'identité qui sont pris en charge. Vous pouvez l'utiliser pour découvrir dynamiquement les informations sur les points d'accès Open Cloud OAuth 2.0 et la configuration, tels que l'autorisation d'extrémité, le jeton d'extrémité et le configurerde clés publique.

Après avoir récupéré et obtenu le DiscoveryDocument de l'URL du document Discovery, vous pouvez soit inspecter manuellement les champs dans la réponse pour vérifier les informations, soit créer votre propre bibliothèque de cartes aux champs dans le schéma de réponse pour automatiser votre flux de travail.

GET .well-known/openid-configuration

Réponse

Toutes les réponses de DiscoveryDocument suivent le même schéma que la réponse d'exemple suivante.

Exemple de réponse de document de découverte

{
"issuer": "https://apis.roblox.com/oauth/",
"authorization_endpoint": "https://api.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/ressources",
"userinfo_endpoint": "https://apis.roblox.com/oauth/v1/userinfo",
"jwks_uri": "https://apis.roblox.com/oauth/v1/certs",
"registration_endpoint": "https://créer.roblox.com/dash/crédits",
"service_documentation": "https://créer.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"
]
}