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/authorizePOST v1/tokenPOST v1/token/introspectPOST v1/token/resourcesPOST v1/token/revokeGET v1/userinfoGET .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 :
- Http Basic Authentification du schéma avec une balise d'autorisation : Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
- 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"
]
}