Authentification d'OAuth 2.

*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 finaux que vous appelez pour mettre en œuvre le flux de code d'autorisation OAuth 2.0, ainsi que d'autres points finaux utiles pour mettre en œuvre 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

Autorisation

GET v1/authorize

Obtient l'autorisation de l'utilisateur pour se connecter avec son compte Roblox.Attend une URL d'autorisation valide construite avec les paramètres spécifiés.Cet endpoint prend en charge l'autorisation PKCE.

Paramètres de requête

NomDescriptionObligatoireExemple
client_idL'ID du client de l'application.oui816547628409595165403873012
redirect_uriL'URL vers laquelle les utilisateurs sont redirigés après le flux d'autorisation terminé.ouihttps://www.roblox.com/example-redirect
scopeLes scopes demandés, espace séparé.Utilisez le scope openid pour recevoir un jeton d'identification.Utilisez les scopes openid et profile pour obtenir plus d'informations sur l'utilisateur.ouiopenid profile
type de réponseLes crédences que l'app souhaite retourner.La valeur par défaut est le taperd'autorisation du code d'autorisation.ouinone , code
promptSpécifie les pages d'authentification et de consentement qui sont affichées aux utilisateurs.Certaines écrans sont requis pour les applications tierces et ne peuvent pas être ignorés.nonone , login , consent , select_account
nonceLe numéro cryptographique qui lie le jeton au client.non<random_value_1>
étatUne valeur opaque qui empêche la falsification de requêtes entre sites, un type d'attaque malveillante.Renvoyé à l'application après autorisation.no<app-provided-opaque-value>
code_challengeLa chaîne résultante de l'application du code_challenge_method au code_verifier .noChaîne Base64-URL-codée
code_challenge_methodLa fonction qui est appliquée au code_verifier .nonS256

Demande

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é cette fin de point, l'utilisateur est redirigé vers l'URL de redirection spécifiée avec le code d'autorisation dans un paramètre de requête code.Le code d'autorisation :

  • A une durée de vie d'une minute.
  • Ne peut être racheté qu'une seule fois.
  • Est invalide après une utilisation.

échangerde jetons

Pour obtenir des jetons d'accès aux API, échangez un code d'autorisation contre un ensemble de jetons confidentiels .Tous les points d'extrémité de jeton supportent deux types d'authentification client :

  1. HTTP Scheme d'authentification de base avec une tête d'autorisation : Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. ID de 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.

  • Token d'accès - Représente l'autorisation d'un créateur ou d'un utilisateur pour qu'une application tierce ait accès à leurs ressources Roblox protégées.C'est une chaîne désignant une portée spécifique, une durée de vie et d'autres attributs d'accès.Une fois que le serveur d'autorisation Roblox a émis un jeton d'accès à une application, le jeton :

    • Est valide pendant 15 minutes.
    • Peut être utilisé plusieurs fois avant expiration.
    • Peut être invalidé 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 comprend un jeton d'accès, un jeton de rafraîchissement et un jeton d'identification.Un jeton de rafraîchissement :

    • Est valable pendant 90 jours.
    • Ne peut être utilisé qu'une seule fois avant son expiration pour actualiser les jetons.
    • Peut être invalidé avant son expiration si un utilisateur d'application révoque l'autorisation.
  • Token d'identification - Fournit la preuve que l'identité d'un utilisateur a été authentifiée.Son contenu dépend des domaines demandés et peut contenir des informations utilisateur de base, y compris le nom d'affichage Roblox et le nom d'utilisateur d'un utilisateur.Le jeton d'identification est uniquement à des fins d'authentification d'identité et ne fournit pas d'accès à toutes les ressources Roblox.

POST v1/token

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

Demande

(x-www-form-urlencoded)

CléValeur
code<authorization code>
code_verifier<pkce code verifier value>
grant_typeautorisation_code
client_id<client_id>
client_secret<client_secret>
Exemple de demande d'obtention de jeton

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 d'obtention de la réponse au jeton

{
"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 rafraîchissement.

Demande

(x-www-form-urlencoded)

CléValeur
grant_typerefresh_token
refresh_token<refresh_token>
client_id<client_id>
client_secret<client_secret>
Exemple de demande de rafraîchissement de jeton

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

Exemple de demande de rafraîchissement de jeton

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

POST v1/token/introspect

Recevoir des informations sur un jeton.Vérifie si le jeton est actuellement valide et n'a pas encore expiré.Utile pour la validation sans état.Utilisez-le uniquement si l'API que vous utilisez ne nécessite pas de ressource, telle que l'API des ressources, ou si vous voulez simplement voir des revendications spécifiques du jeton.

Demande

(x-www-form-urlencoded)

CléValeur
token<access_token> , <refresh_token> ou <id_token>
client_id<client_id>
client_secret<client_secret>
Exemple de demande de jeton d'introspection

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 au jeton d'introspection 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 auxquelles l'utilisateur a donné la permission.Cela est utile pour la validation étatique.

Demande

(x-www-form-urlencoded)

CléValeur
jeton<access_token>
client_id<client_id>
client_secret<client_secret>
Exemple de demande de ressources de jeton obtenu

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

La valeur U dans ids indique que une portée a accordé l'accès à une ressource appartenant à l'auteur autorisant owner .

Exemple de réponse aux ressources de jeton obtenues

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

POST v1/token/revoke

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

Demande

(x-www-form-urlencoded)

CléValeur
jeton<refresh_token>
client_id<client_id>
client_secret<client_secret>
Exemple de demande de révocation de jeton

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 de l'utilisateur

GET /v1/userinfo

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

Demande

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

Exemple de demande 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 de manière unique l'utilisateur.Les utilisateurs peuvent modifier leur nom d'utilisateur et leur nom d'affichage Roblox, donc ne les utilisez pas comme identifiants uniques pour référencer les utilisateurs sur votre application.

RéclamerDescription
sousID utilisateur Roblox.
nomNom d'affichage Roblox.
pseudonymeNom d'affichage Roblox.
nom d'utilisateur préférénom d'utilisateur Roblox.
created_atTemps de création du compte Roblox en tant qu'horodatage Unix.
profilURL du profil de compte Roblox.
photoImage de tir à la tête d'avatar Roblox.Peut être nul si l'image de tir à la tête de l'avatar n'a pas encore été générée ou a été modérée.
Exemple d'utilisateur avec portée 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 scope de 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 du cloud ouvert, 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 des informations sur les points de terminaison et la configuration d'Open Cloud OAuth 2.0, tels que l'extrémité d'autorisation, l'extrémité de jeton et le configurerde clés publiques.

Après avoir récupéré et récupéré le document de découverte à partir de l' URI du document de découverte, vous pouvez soit inspecter manuellement les champs dans la réponse pour vérifier les informations, soit créer votre propre carte de bibliothèque personnalisée pour les 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 la découverte suivent le même schéma que la réponse d'exemple suivante.

Réponse au document de découverte d'exemple

{
"issuer": "https://apis.roblox.com/oauth/",
"authorization_endpoint": "https://apis.roblox.com/oauth/v1/autoriser",
"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/dashboard/credentials",
"service_documentation": "https://créer.roblox.com/docs/référence/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"
]
}