Este documento describe los puntos finales que debes llamar para implementar el flujo de autorización con código OAuth 2.0, así como otros puntos finales útiles para implementar la autenticación en tus aplicaciones.
URL basehttps://apis.roblox.com/oauth
Puntos finalesGET v1/authorizePOST v1/tokenPOST v1/token/introspectPOST v1/token/resourcesPOST v1/token/revokeGET v1/userinfoGET .well-known/openid-configuration
Autorización
GET v1/authorize
Obtiene autorización del usuario para autenticarse con su cuenta de Roblox. Espera una URL de autorización válida construida con los parámetros especificados. Este punto final admite la autorización PKCE.
Parámetros de consulta
| Nombre | Descripción | Requerido | Ejemplo |
|---|---|---|---|
| client_id | El ID del cliente de la aplicación. | sí | 816547628409595165403873012 |
| redirect_uri | La URL a la que los usuarios son redirigidos después de completar el flujo de autorización. | sí | `https://www.roblox.com/example-redirect`` |
| scope | Los ámbitos solicitados, separados por espacios. Usa el ámbito openid para recibir un token de ID. Usa los ámbitos openid y profile para obtener más información del usuario. | sí | openid profile |
| response_type | Las credenciales que la aplicación desea recibir. El valor predeterminado es el tipo de concesión de código de autorización. | sí | none, code |
| prompt | Especifica qué páginas de autenticación y consentimiento se muestran a los usuarios. Algunas pantallas son requeridas para aplicaciones de terceros y no se pueden omitir. | no | none, login, consent, select_account |
| nonce | El número criptográfico que une el token con el cliente. | no | <random_value_1> |
| state | Un valor opaco que previene el ataque de falsificación de solicitud entre sitios. Se pasa de vuelta a la aplicación después de la autorización. | no | <app-provided-opaque-value> |
| code_challenge | La cadena resultante de aplicar el code_challenge_method al code_verifier. | no | Cadena codificada en Base64-URL |
| code_challenge_method | La función que se aplica al code_verifier. | no | S256 |
Solicitud
Ejemplo de Solicitud para Dirigirse al Flujo de Autorizaciónhttps://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
Respuesta
Después de llamar a este punto final, el usuario es redirigido a la URL de redirección especificada con el código de autorización en un parámetro de consulta code. El código de autorización:
- Tiene una vida útil de un minuto.
- Solo puede ser canjeado una vez.
- Es inválido después de un uso.
Intercambio de token
Para obtener tokens para acceder a las API, intercambia un código de autorización por un conjunto de tokens confidenciales. Todos los puntos finales de tokens admiten dos tipos de autenticación de cliente:
- Esquema de Autenticación Básica HTTP con un encabezado de autorización: Authorization: Basic Base64 encoded(<client_id>:<client_secret>).
- ID de cliente y secreto en el cuerpo de la solicitud como parámetros.
La siguiente lista describe los diversos tokens que recibes de este punto final.
Token de acceso - Representa la autorización de un creador o usuario para que una aplicación de terceros acceda a sus recursos protegidos de Roblox. Es una cadena que denota un ámbito específico, vida útil y otros atributos de acceso. Una vez que el servidor de autorización de Roblox emite un token de acceso a una aplicación, el token:
- Es válido por 15 minutos.
- Puede utilizarse múltiples veces antes de que expire.
- Puede ser invalidado antes de que expire si un usuario de la aplicación revoca la autorización.
Token de actualización - Refresca una sesión de autorización. Una aplicación puede usar el token de actualización para obtener un nuevo conjunto de tokens, que incluye un token de acceso, un token de actualización y un token de ID. Un token de actualización:
- Es válido por 90 días.
- Solo puede ser utilizado una vez antes de que expire para refrescar tokens.
- Puede ser invalidado antes de que expire si un usuario de la aplicación revoca la autorización.
Token de ID - Proporciona prueba de que se ha autenticado la identidad de un usuario. Su contenido depende de los ámbitos solicitados y puede contener información básica del usuario, incluyendo el nombre de visualización y el nombre de usuario de Roblox. El token de ID es solo para propósitos de autenticación de identidad y no proporciona acceso a ningún recurso de Roblox.
POST v1/token
Obtén un conjunto de tokens con un código de autorización.
Solicitud
(x-www-form-urlencoded)
| Clave | Valor |
|---|---|
| code | <código de autorización> |
| code_verifier | <valor del verificador pkce> |
| grant_type | authorization_code |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ejemplo de Solicitud para Obtener Tokencurl --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'
Respuesta
Ejemplo de Respuesta para Obtener Token
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token
Obtén un conjunto de tokens con un token de actualización.
Solicitud
(x-www-form-urlencoded)
| Clave | Valor |
|---|---|
| grant_type | refresh_token |
| refresh_token | <refresh_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ejemplo de Solicitud para Refrescar Tokencurl --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'
Respuesta
Ejemplo de Respuesta para Refrescar Token
{
"access_token": "...",
"refresh_token": "...",
"token_type": "Bearer",
"expires_in": 899,
"scope": "universe-messaging-service:publish"
}
POST v1/token/introspect
Recibe información sobre un token. Verifica si el token es actualmente válido y no ha expirado aún. Útil para la validación sin estado. Utiliza solo si la API a la que accedes no requiere un recurso, como la API de Activos, o si solo quieres ver reclamaciones específicas del token.
Solicitud
(x-www-form-urlencoded)
| Clave | Valor |
|---|---|
| token | <access_token>, <refresh_token> o <id_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ejemplo de Solicitud para Introspectar Tokencurl --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'
Respuesta
Ejemplo de Respuesta para Introspectar Token
{
"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
Verifica si un token puede acceder a un recurso específico obteniendo la lista de recursos de usuario para los que el usuario dio permiso. Esto es útil para la validación con estado.
Solicitud
(x-www-form-urlencoded)
| Clave | Valor |
|---|---|
| token | <access_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ejemplo de Solicitud para Obtener Recursos de Tokencurl --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'
Respuesta
El valor U en ids indica que un ámbito ha otorgado acceso a un recurso propietario del owner que autoriza.
Ejemplo de Respuesta para Obtener Recursos de Token
{
"resource_infos": [
{
"owner": {
"id": "1516563360",
"type": "User"
},
"resources": {
"universe": {
"ids": ["3828411582"]
},
"creator": {
"ids": ["U"]
}
}
}
]
}
POST v1/token/revoke
Revoca una sesión de autorización utilizando el token de actualización proporcionado.
Solicitud
(x-www-form-urlencoded)
| Clave | Valor |
|---|---|
| token | <refresh_token> |
| client_id | <client_id> |
| client_secret | <client_secret> |
Ejemplo de Solicitud para Revocar Tokencurl --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'
Respuesta
200 OK con una respuesta vacía
Información del Usuario
GET /v1/userinfo
Obtiene el ID de usuario de Roblox y otros metadatos del usuario.
Solicitud
Encabezado de autorización: Authorization: Bearer <access_token>
Ejemplo de Solicitud para Obtener Información del Usuariocurl --location --request GET 'https://apis.roblox.com/oauth/v1/userinfo' \--header 'Authorization: Bearer eyjlflabtfl...4gxqYBG'
Respuesta
Puedes usar el valor sub para identificar de manera única al usuario. Los usuarios pueden cambiar su nombre de usuario de Roblox y su nombre de visualización, por lo que no los uses como identificadores únicos para referirte a los usuarios en tu aplicación.
| Reclamación | Descripción |
|---|---|
| sub | ID de usuario de Roblox. |
| name | Nombre de visualización de Roblox. |
| nickname | Nombre de visualización de Roblox. |
| preferred_username | Nombre de usuario de Roblox. |
| created_at | Hora de creación de la cuenta de Roblox como un timestamp Unix. |
| profile | URL del perfil de cuenta de Roblox. |
| picture | Imagen de la cabeza del avatar de Roblox. Puede ser nula si la imagen de cabeza del avatar aún no se ha generado o ha sido moderada. |
Ejemplo de Usuario con Ámbito de Perfil
{
"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"
}
Ejemplo de Usuario sin Ámbito de Perfil
{
"sub": "1516563360"
}
Descubrimiento
El Documento de Descubrimiento de OpenID Connect (OIDC) es un documento JSON que contiene metadatos sobre los detalles de configuración de Open Cloud, incluyendo una lista de ámbitos relacionados con la identidad y reclamaciones que son compatibles. Puedes usarlo para descubrir dinámicamente información sobre los puntos finales y la configuración de Open Cloud OAuth 2.0, tales como el punto final de autorización, punto final de token, y conjunto de claves públicas.
Después de recuperar y obtener el Documento de Descubrimiento desde la URI del documento de Descubrimiento, puedes inspeccionar manualmente los campos en la respuesta para verificar la información, o puedes crear tu propia biblioteca personalizada que mapee a los campos en el esquema de respuesta para automatizar tu flujo de trabajo.
GET .well-known/openid-configuration
Respuesta
Todas las respuestas del Documento de Descubrimiento siguen el mismo esquema que el siguiente ejemplo de respuesta.
Ejemplo de Respuesta del Documento de Descubrimiento
{
"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"
]
}