Comprendiendo URI de Redirección y Flujo de Código de Autorización en OpenID Connect (OIDC)
Echemos un vistazo más de cerca al URI de redirección, ya que es un componente de seguridad crítico en el proceso de autenticación OIDC.
¿Qué es un URI de Redirección?
Un URI de Redirección, también conocido como URL de Respuesta, es un componente de seguridad crítico en el proceso de autenticación OIDC. Especifica la URL a la que los usuarios son enviados después de iniciar sesión con éxito a través de un proveedor OIDC. Más importante aún, es donde tu aplicación recibe el código de autorización necesario para obtener tokens.
Consulta la wiki del URI de Redirección para más detalles.
¿Qué es el Flujo de Código de Autorización?
El Flujo de Código de Autorización (definido en OAuth 2.0 RFC 6749, sección 4.1) es un método de autenticación fundamental en OIDC. Implica intercambiar un código de autorización por un token de acceso y, opcionalmente, un token de actualización. Este flujo es adecuado para aplicaciones que pueden mantener de forma segura un secreto de cliente, como aplicaciones web del lado del servidor.
Consulta la wiki del Flujo de Código de Autorización para más detalles.
¿Cómo funciona el URI de Redirección en el Flujo de Código de Autorización?
En el Flujo de Código de Autorización, el URI de Redirección es el destino al cual el proveedor OIDC envía el código de autorización después de que el usuario se autentica con éxito. Debe estar pre-registrado con el proveedor OIDC para asegurar la seguridad y prevenir redirecciones no autorizadas.
Aquí se muestra cómo puedes registrar un URI de Redirección en Logto Console:
Al iniciar una sesión:
- Solicitud de autorización: Tu aplicación dirige al usuario al punto final de autorización del proveedor OIDC, incluyendo parámetros como
client_id
,response_type
,scope
y elredirect_uri
. - Autenticación del usuario: El usuario se autentica con el proveedor OIDC.
- Entrega del código de autorización: Tras la autenticación exitosa, el proveedor OIDC redirige al usuario al
redirect_uri
especificado, incluyendo un código de autorización como un parámetro de consulta.
El proveedor OIDC valida el redirect_uri
en comparación con la lista de URIs pre-registradas. Si hay una discrepancia, se devolverá un error invalid_redirect_uri
, mejorando la seguridad al prevenir que puntos finales no autorizados reciban tokens.
Buenas prácticas para URIs de Redirección
En casos de uso en la vida real, una práctica común es declarar una página "Callback" dedicada y asociar un enrutador / enlace profundo que permita el acceso directo desde el exterior. Este enlace debe usarse como el URI de redirección.
Asumiendo que tienes una aplicación web de página única que se ejecuta en https://my-app.com
, entonces usualmente el URI de redirección se declararía como https://my-app.com/callback
O si es una aplicación móvil nativa, entonces el URI de redirección usualmente comienza con un esquema personalizado, por ejemplo com.company://myapp/callback
Otras buenas prácticas incluyen:
- Evitar comodines: No uses patrones de comodines en los URIs de redirección. Enumera explícitamente todos los URIs permitidos para prevenir el acceso no autorizado.
- Coincidencia exacta: Asegúrate de que el URI de redirección coincida exactamente con el registrado en el proveedor OIDC. Incluso una barra inclinada al final puede causar una discrepancia.
Manejar la devolución de llamada de inicio de sesión
Para manejar el código de autorización devuelto a tu redirect_uri
, sigue estos pasos:
-
Extraer el código de autorización: Recupera el parámetro de código de la cadena de consulta del URI de redirección.
-
Intercambiar el código de autorización por tokens: Componer una solicitud POST al punto final del token del proveedor OIDC, incluyendo:
client_id
: El ID de tu aplicación en el proveedor OIDCcode
: El código de autorización recibido del URI de redireccióncode_verifier
: Una cadena aleatoria generada en el clienteredirect_uri
: El mismo URI utilizado en la solicitud de autorizacióngrant_type
: El tipo de concesión, generalmenteauthorization_code
Ejemplo de solicitud de intercambio de tokens en JavaScript
Simplificar el proceso de intercambio de código en Logto aprovechando los SDK de Logto
Los SDK de Logto son el kit de desarrollo escrito en un lenguaje de programación o marco específico, p. ej., Logto React SDK, Next.js SDK y Swift SDK. Usar un SDK puede simplificar mucho las cosas con solo llamar a una o dos funciones.
Aquí tienes un ejemplo de componente "Callback" de React usando el SDK oficial de React de Logto:
Las guías de integración de SDK se pueden encontrar en los documentos de inicio rápido de Logto.
Resumen: por qué es importante dominar los URIs de Redirección en OIDC
Entender los URIs de Redirección en OIDC con el flujo de código de autorización es crucial para asegurar y optimizar tus procesos de autenticación. Al registrar URIs de redirección de confianza y manejar eficientemente las devoluciones de llamada de inicio de sesión, puedes asegurar una experiencia fluida y segura para tus usuarios mientras simplificas tus esfuerzos de desarrollo con los SDK de Logto.