Implementación de aplicació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í.

Open Cloud admite el flujo de autorización de OAuth 2.0 con y sin PKCE, dependiendo de si sus clientes son confidenciales o públicos.

  • Clientes confidenciales son aplicaciones que son capaces de mantener las credenciales confidenciales, como un sitio web que pueda almacenar y recuperar secretos de forma segura en su backend.
  • Clientes públicos son aplicaciones que no pueden mantener secretos, como aplicaciones de navegador móvil y web.

Recomendamos el flujo de código de autorización de OAuth 2.0 con PKCE para todos los clientes y lo requerimos para clientes públicos.

Para implementar el flujo de código de autorización, tu aplicación realiza los siguientes pasos:

  1. Generar un verificador de código y un desafío de código (solo PKCE).Esto te permite incluir un desafío en tus solicitudes en lugar del secreto del cliente, lo que mejora la seguridad.
  2. Envíe una solicitud GET a la puerta de autorización con los parámetros apropiados.
  3. Manija la devolución de llamadaautorización.Después de obtener la autorización, utilice el código de autorización de Roblox en una solicitud de redirección a la URL que especificó durante la creacionesde la aplicación.Analiza el código de autorización para su uso posterior.
  4. Envíe una solicitud POST a la interfaz de token con el código de autorización.Si tiene éxito, recibe tokens de acceso y actualización con los que realizar llamadas API.
  5. Llama a cualquier API de nube abierta que admita la autenticación de OAuth 2.0 en función de la documentación de referencia para los recursos que quieres acceso.

Las siguientes secciones describen cada paso con más detalle.

Generar un desafío de código (solo para PKCE)

Antes de iniciar el proceso de autorización, debes generar un desafío de código desde un verificador de código.Puedes usar bibliotecas o funciones integradas en el lenguaje de programación de tu elección para crear el verificador de código, calcular el hash y realizar la codificación Base64 para generar el desafío de código.

Al crear el verificador de código, solo use caracteres no reservados, incluidas las letras mayúsculas y minúsculas (A-Z, a-z), los números decimales (0-9), la barra oblicua (-), el período (.), la barra inferior (_) y la tilde (~), con una longitud mínima de 43 caracteres y una longitud máxima de 128 caracteres.

El siguiente ejemplo muestra cómo usar Javascript para crear un verificador de código y generar el desafío de código usando el algoritmo de hash SHA-256:

Generate Code Challenge

const crypto = require('crypto');
// base64URL encode the verifier and challenge
function base64URLEncode(str) {
return str.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
// create sha256 hash from code verifier
function sha256(buffer) {
return crypto.createHash('sha256').update(buffer).digest(`base64`);
}
// create a random code verifier
var code_verifier = base64URLEncode(crypto.randomBytes(32));
// generate a challenge from the code verifier
var code_challenge = base64URLEncode(sha256(code_verifier));

Para PKCE, necesitas tanto el verificador de código como los valores de desafío en pasos posteriores.

Construir la URL de autorización

Para iniciar el proceso de autorización del usuario, construye una URL de autorización con los parámetros requeridos:

  • client_id : La ID de cliente de tu aplicación (app)obtenida después de registrar tu aplicación .
  • redirect_uri : La URI de redirección de tu aplicación (app), el punto de reingreso de tu aplicación (app).
  • scope : Los alcances solicitados que definen los permisos de acceso que tu aplicación necesita en una lista separada por espacios.
  • response_type : Establecerlo en code para indicar el flujo de código de autorización. Requerido solo para PKCE
  • code_challenge : El desafío de código generado desde un verificador de código.
  • code_challenge_method : Establece este valor de parámetro a S256 para indicar que el desafío de código se transformó usando el algoritmo SHA-256, el método de desafío de código más ampliamente soportado y seguro.
  • state : Un valor aleatorio opaco y seguro para mantener el estado entre la solicitud y devolución de llamadade devolución. Requerido solo para no PKCE
  • client_secret : El secreto del cliente de tu aplicación (app)obtenido después de registrar tu aplicación .Si está utilizando la autenticación con PKCE, omita este parámetro.La URL de solicitud de autorización debe estar bien formada, como en el siguiente ejemplo:
Ejemplo de URL de autorización PKCE

https://apis.roblox.com/oauth/v1/authorize?client_id=7290610391231237934964
&code_challenge=PLEKKVCjdD1V_07wOKlAm7P02NC-LZ_1hQfdu5XSXEI
&code_challenge_method=S256
&redirect_uri=https://example.com/redirect
&scope=openid%20profile
&response_type=code
&state=abc123

Cuando los usuarios visitan la URL, se los lleva a través del flujo de autorización. Si tiene éxito, Roblox redirige al usuario al dominio especificado redirect_uri.

Manejar llamadas de autorización

Cuando un flujo de autorización tiene éxito, tu aplicación recibe una solicitud GET de servidor de autorización de Roblox en el redirect_uri que especificaste.En la solicitud, recibes code (código de autorización) y state (si proporcionaste un valor previamente) parámetros.

  • El parámetro code contiene un código de autorización que la aplicación puede intercambiar por un token de acceso del servidor de autorización.La mayoría de los idiomas de servidor de backend tienen formas estándar de acceder a los parámetros de consulta como objetos decodificados.Necesitarás obtener el parámetro code y usarlo para intercambiar por tokens de acceso.

  • El parámetro state es un valor opaco que inicialmente proporcionaste en la solicitud de autorización.Puedes usar este parámetro para mantener el estado o el contexto del proceso de autorización.

Por ejemplo, puedes recibir una solicitud GET con la siguiente URL si especificaste tu URI de redirección para ser https://example.com/redirect.

Ejemplo de URL de redirección

https://example.com/redirect?code=10c45PNuquKnFJ6pUcy5-fHkghEM6lSegm-7hj9mVEprub1dSDuStuKK_EAUXY7AHTD63xcnmvxSLthp-C8g3jzIGZVzuXSd20Y2dEYI9hx0LZmPg95ME4z2K03UheiZbroyXUjYyB3ReoMqobzDVPzyx6IS8kj2Uu-11Xq_0JiTYxtDatuqXRNIAmJT8gMJmbSyOLOP_vnDvbeMUiBsqCRrkTGVbWSwYSc8sTVVE-535kYdqQOgNjH1ffCoZLGl8YYxLnpb2CXJlRQPrcjkA&state=6789

Si la autorización falla, tu aplicación recibe una solicitud GET de redirección especificada con los parámetros error , error_description y state (si es aplicable).

  • El parámetro error indica el error específico de OAuth 2.0 que ocurrió durante el proceso de autorización.
  • El parámetro error_description proporciona detalles adicionales del error.
  • El parámetro state ayuda a tu app a mantener el estado en el caso de un fallo.

Intercambiar un código de autorización por fichas de acceso

Cuando hayas analizado la autorización code, intercámbiala por tokens para acceder a los recursos de Roblox deseados:

  1. Solicite un token de acceso y un token de actualización enviando una solicitud a la puerta de enlace de tokens .La solicitud debe incluir el código de autorización, la ID del cliente y el valor del verificador de código (PKCE) o el secreto del cliente (no PKCE) en el formato x-www-form-urlencoded.

  2. Analiza los tokens aplicables de la respuesta recibida.El token de acceso es válido por 15 minutos.Almacene el token de actualización de forma segura, típicamente en el lado del servidor, para que pueda usarlo para obtener nuevos tokens en el futuro.

    Respuesta de punto final de token de ejemplo

    {
    "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IlBOeHhpb2JFNE8zbGhQUUlUZG9QQ3FCTE81amh3aXZFS1pHOWhfTGJNOWMiLCJ0eXAiOiJKV11234.eyJzdWIiOiIyMDY3MjQzOTU5IiwiYWlkIjoiM2Q2MWU3NDctM2ExNS00NTE4LWJiNDEtMWU3M2VhNDUyZWIwIiwic2NvcGUiOiJvcGVuaWQ6cmVhZCBwcm9maWxlOnJlYWQiLCJqdGkiOiJBVC5QbmFWVHpJU3k2YkI5TG5QYnZpTCIsIm5iZiI6MTY5MTYzOTY5OCwiZXhwIjoxNjkxNjQwNTk4LCJpYXQiOjE2OTE2Mzk2OTgsImlzcyI6Imh0dHBzOi8vYXBpcy5yb2Jsb3guY29tL29hdXRoLyIsImF1ZCI6IjcyOTA2MTAzOTc5ODc5MzQ5Nj1234.BjwMkC8Q5a_iP1Q5Th8FrS7ntioAollv_zW9mprF1ats9CD2axCvupZydVzYphzQ8TawunnYXp0Xe8k0t8ithg",
    "refresh_token": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoidGpHd1BHaURDWkprZEZkREg1dFZ5emVzRWQyQ0o1NDgtUi1Ya1J1TTBBRSIsInR5cCI6IkpXVCJ9..nKYZvjvXH6msDG8Udluuuw.PwP-_HJIjrgYdY-gMR0Q3cabNwIbmItcMEQHx5r7qStVVa5l4CbrKwJvjY-w9xZ9VFb6P70WmXndNifnio5BPZmivW5QkJgv5_sxLoCwsqB1bmEkz2nFF4ANLzQLCQMvQwgXHPMfCK-lclpVEwnHk4kemrCFOvfuH4qJ1V0Q0j0WjsSU026M67zMaFrrhSKwQh-SzhmXejhKJOjhNfY9hAmeS-LsLLdszAq_JyN7fIvZl1fWDnER_CeDAbQDj5K5ECNOHAQ3RemQ2dADVlc07VEt2KpSqUlHlq3rcaIcNRHCue4GfbCc1lZwQsALbM1aSIzF68klXs1Cj_ZmXxOSOyHxwmbQCHwY7aa16f3VEJzCYa6m0m5U_oHy84iQzsC-_JvBaeFCachrLWmFY818S-nH5fCIORdYgc4s7Fj5HdULnnVwiKeQLKSaYsfneHtqwOc_ux2QYv6Cv6Xn04tkB2TEsuZ7dFwPI-Hw2O30vCzLTcZ-Fl08ER0J0hhq4ep7B641IOnPpMZ1m0gpJJRPbHX_ooqHol9zHZ0gcLKMdYy1wUgsmn_nK_THK3m0RmENXNtepyLw_tSd5vqqIWZ5NFglKSqVnbomEkxneEJRgoFhBGMZiR-3FXMaVryUjq-N.Q_t4NGxTUSMsLVEppkTu0Q6rwt2rKJfFGuvy3s12345",
    "token_type": "Bearer",
    "expires_in": 899,
    "id_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IkNWWDU1Mi1zeWh4Y1VGdW5vNktScmtReFB1eW15YTRQVllodWdsd3hnNzgiLCJ0eXAiOiJKV11234.eyJzdWIiOiIyMDY3MjQzOTU5IiwibmFtZSI6ImxpbmtzZ29hdCIsIm5pY2tuYW1lIjoibGlua3Nnb2F0IiwicHJlZmVycmVkX3VzZXJuYW1lIjoibGlua3Nnb2F0IiwiY3JlYXRlZF9hdCI6MTYwNzM1NDIzMiwicHJvZmlsZSI6Imh0dHBzOi8vd3d3LnJvYmxveC5jb20vdXNlcnMvMjA2NzI0Mzk1OS9wcm9maWxlIiwibm9uY2UiOiIxMjM0NSIsImp0aSI6IklELnltd3ZjTUdpOVg4azkyNm9qd1I5IiwibmJmIjoxNjkxNjM5Njk4LCJleHAiOjE2OTE2NzU2OTgsImlhdCI6MTY5MTYzOTY5OCwiaXNzIjoiaHR0cHM6Ly9hcGlzLnJvYmxveC5jb20vb2F1dGgvIiwiYXVkIjoiNzI5MDYxMDM5Nzk4NzkzNDk2NCJ9.kZgCMJQGsariwCi8HqsUadUBMM8ZOmf_IPDoWyQY9gVX4Kx3PubDz-Q6MvZ9eU5spNFz0-PEH-G2WSvq2ljDyg",
    "scope": "openid profile"
    }

Hacer una llamada a un método de recursos

Ahora que tienes el token de acceso requerido, puedes usarlo para realizar llamadas autenticadas a los métodos de recursos.Incluye el token de acceso en el encabezado de todas las solicitudes de API para autorizarlas.

Por ejemplo, puedes probar si tu aplicación funciona correctamente al pasar por todo el flujo de autorización y luego hacer una solicitud al punto de información del usuario con un token de acceso.Asegúrese de tener el openid o ambos alcances openid y profile antes de llamar a este punto final.Si tiene éxito, la respuesta de ese punto final se parece a esto:

Respuesta de información de usuario de ejemplo

{
"sub": "12345678",
"name": "Jane Doe",
"nickname": "robloxjanedoe",
"preferred_username": "robloxjanedoe",
"created_at": 1607354232,
"profile": "https://www.roblox.com/usuarios/12345678/perfil"
}