Autentificación de OAuth 2.0

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Este documento describe los endpoints que llamas para implementar el flujo de autorización de OAuth 2.0, así como otros endpoints útiles para implementar la autentificación en tus aplicaciones.

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

Autentificació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 de interfaz soporta la autentificación de PKCE.

Parámetros de consulta

Solicitud

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

Respuesta

Después de llamar este punto de interfaz, el usuario se redirige a la URL de redirección especificada con el código de autorización en una code parámetro de consulta. El código de autorización:

  • Tiene una vida útil de un minuto.
  • Solo se puede canjear una vez.
  • Es inválido después de un uso.

Intercambio de fichas

Para obtener fichas para acceder a las API, intercambia un código de autorización por un conjunto de fichas de confianza. Todos los puntos de finalización de fichas soportan dos tipos de autentificación del cliente:

  1. Esquema de autentificación HTTP básico con un encabezado de autorización: Authorization: Basic Base64 encoded(<client_id>:<client_secret>) .
  2. ID del cliente y secreto en el cuerpo de la solicitud como parámetros.

La siguiente lista describe las varias fichas que recibes de este punto de final.

  • Token de acceso - Representa la autorización de un creador o usuario para que un tercer servicio de aplicaciones acceda a sus recursos protegidos de Roblox. Es una cadena que denota un alcance, una vida útil y otros atributos de acceso. Una vez que el servidor de autorización de Roblox emita un token de acceso a un aplicación (app), el token:

    • Es válido durante 15 minutos.
    • Puede usarse varias veces antes de que caduque.
    • Puede ser inválido antes de que caduque si un usuario de aplicación revoca la autorización.
  • Token de actualización de - Actualiza 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 ID token. Un token de actualización:

    • Es válido durante 90 días.
    • Solo se puede usar una vez antes de que caduque para actualizar fichas.
    • Puede ser inválido antes de que caduque si un usuario de aplicación revoca la autorización.
  • Token de identificación ID - Proporciona prueba de que la identificación de un usuario ha sido autenticada. Su contenido depende de los escenarios solicitados y puede contener información básica del usuario, incluida la identificación de su nombre de usuario y contraseña. El token de identificación es solo para propósitos de autentificación de identificación y no proporciona acceso a ningún recurso de Roblox.

POST v1/token

Obtener un conjunto de tokens con un código de autorización.

Solicitud

(x-www-form-urlencoded)

| Clave | Valor | | -------------- | | | code | <authorization code> | | code_verifier | <pkce code verifier value> | | grant_type | authorization_code | | client_id | <client_id> | | client_secret | 1> <client_secret>1>

Solicitud de Token de Ejemplo

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'

Respuesta

Ejemplo de respuesta de token de ejemplo

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

POST v1/token

Obtener un conjunto de tokens con un token de actualización.

Solicitud

(x-www-form-urlencoded)

| Clave | Valor | | -------------- | |授权_类型 | refresh_ token | | refresh_ token | <refresh_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Solicitud de actualización de tokens de ejemplo

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'

Respuesta

Solicitud de actualización de tokens de ejemplo

{
"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 está actualmente válido y no ha expirado aún. Útil para la validación sin estado. Úselo solo si la API que está accediendo no requiere un recurso, como Assets API, o si solo desea ver reclamos específicos del token.

Solicitud

(x-www-form-urlencoded)

| Clave | Valor | | -------------- | --- | | token | <access_token> , <refresh_token> o <id_token> | | client_id | 1> <client_id>1> | | client_secret | 4> <客户_

Solicitud de tokens de Introspect

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'

Respuesta

Respuesta de Token de Introspect de Ejemplo

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

Compruebe si un token puede acceder a un recurso específico al obtener la lista de recursos de usuario que el usuario dio permiso. Esto es útil para la validación estatal.

Solicitud

(x-www-form-urlencoded)

| Clave | Valor | | -------------- | | | token | <access_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Solicitud de recursos de tokens de ejemplo

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'

Respuesta

Ejemplo de respuesta de recursos de tokens

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

POST v1/token/revoke

Revoca una sesión de autorización usando el token de actualización proporcionado.

Solicitud

(x-www-form-urlencoded)

| Clave | Valor | | -------------- | | | token | <refresh_token> | | client_id | <client_id> | | client_secret | <client_secret> |

Solicitud de reembolso de tokens de ejemplo

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'

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 de usuario.

Solicitud

cabecera de autorización : Authorization: Bearer <access_token>

Ejemplo Solicitud de Información del Usuario

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

Respuesta

Puede usar el valor de sub para identificar únicamente al usuario. Los usuarios pueden cambiar su nombre de usuario de Roblox y nombre de pantalla, por lo que no los use como identificadores únicos para referirse a los usuarios en su aplicación (app).

| Reclamar | Descripción | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

Ejemplo de usuario con alcance 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 alcance de perfil

{
"sub": "1516563360"
}

Descubrimiento

El OpenID Connect (OIDC) DiscoveryDocument es un documento JSON que contiene metadatos sobre los detalles de la configuración de Open Cloud, incluida una lista de escopios y reclamos relacionados con la identificación que son admitidos. Puede usarlo para descubrir dinámicamente información sobre los puntos de finalización de Open Cloud OAuth 2.0 y la configuración, como el punto de autorización, el punto de token y el establecerde claves públicas.

Después de recuperar y obtener el documento de descubrimiento de la URL del documento de descubrimiento, puedes inspeccionar y obtener manualmente los campos en la respuesta para verificar la información, o puedes crear tu propia biblioteca personalizada para los campos en la respuesta para automatizar tu flujo de trabajo.

GET .well-known/openid-configuration

Respuesta

Todas las respuestas de Discovery se basan en el mismo esquema que la siguiente respuesta de ejemplo.

Ejemplo de respuesta del documento de descubrimiento

{
"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 / revocar",
"resources_endpoint": "https://apis.roblox.com/oauth/v1/ token / recursos",
"userinfo_endpoint": "https://apis.roblox.com/oauth/v1/userinfo",
"jwks_uri": "https://api.roblox.com/oauth/v1/certs",
"registration_endpoint": "https://crear.roblox.com/dash/credenciales",
"service_documentation": "https://crear.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"
]
}