Gestión de sesiones OIDC
Este artículo explica cómo se gestionan las sesiones OIDC y el estado de autenticación del usuario en el contexto de las interacciones entre el IdP y el SP.
¿Qué es la gestión de sesiones OIDC?
OpenID Connect (OIDC) es una capa de identidad simple construida sobre el protocolo OAuth 2.0. Permite a los clientes verificar la identidad del usuario final basado en la autenticación realizada por el servidor de autorización, así como obtener información básica del perfil del usuario en una forma interoperable y similar a REST.
OIDC está diseñado para ser fácil de usar e implementar, con un enfoque en la simplicidad y flexibilidad. Se utiliza ampliamente para el inicio de sesión único (SSO) y verificación de identidad en aplicaciones web, aplicaciones móviles y APIs.
Entender el estado de autenticación y la gestión de sesiones en OIDC es crucial. Este artículo explica cómo se gestionan las sesiones OIDC y el estado de autenticación del usuario en el contexto de las interacciones entre el Proveedor de Identidad (IdP) y la Parte Confiable (RP) o Proveedor de Servicios (SP).
Este artículo incluye varios términos clave.
- Proveedor de Identidad (IdP): El servicio que almacena y autentica identidades de usuarios.
- Proveedor de Servicios (SP) o Parte Dependiente (RP): Una aplicación web o servicio que proporciona servicios a los usuarios y depende del IdP para la autenticación del usuario.
- Sesión de inicio de sesión o Sesión de autenticación: La sesión que se establece cuando un usuario inicia sesión en el IdP.
- Concesión: La información centralizada de autenticación y autorización del usuario que es generada y gestionada por el IdP.
- Inicio de Sesión Único (SSO): Un servicio de sesión y autenticación de usuario que permite a un usuario usar un conjunto de credenciales de inicio de sesión (por ejemplo, nombre y contraseña) para acceder a múltiples aplicaciones.
¿Cómo funciona el flujo de autenticación OIDC?
Para entender mejor la gestión de sesiones OIDC y el estado de autenticación del usuario, repasemos brevemente el flujo de autenticación OIDC para una aplicación web:
- El usuario accede a la aplicación web (RP).
- El RP redirige al usuario al proveedor OIDC (IdP) para autenticación.
- El proveedor OIDC verifica el estado de la sesión de inicio de sesión del usuario. Si no existe sesión o la sesión ha expirado, se solicita al usuario que inicie sesión.
- El usuario interactúa con la página de inicio de sesión para ser autenticado.
- La página de inicio de sesión envía el resultado de la interacción al proveedor OIDC.
- El proveedor OIDC crea una nueva sesión de inicio de sesión y concesión de autenticación para el usuario.
- El proveedor OIDC redirige al usuario de vuelta al RP con un código de autenticación (flujo de código de autorización).
- El RP recibe el código de autenticación y lo intercambia por tokens para acceder a la información del usuario.
¿Qué es la gestión de sesiones de inicio de sesión RP?
Una sesión de inicio de sesión se establece cuando un usuario inicia sesión en el IdP. Esta sesión se utiliza para rastrear el estado de autenticación del usuario en el IdP. La sesión generalmente incluye información como la identidad del usuario, el tiempo de autenticación y el tiempo de expiración de la sesión. Se crea cuando el usuario inicia sesión por primera vez y se mantiene hasta que el usuario cierra sesión o la sesión expira.
Se establecerá una cookie de sesión de manera segura en el navegador del usuario para mantener el estado de la sesión. La cookie de sesión se utiliza para identificar la sesión del usuario y autenticar al usuario para solicitudes de autenticación subsecuentes. Esta cookie generalmente se configura con las banderas HttpOnly
y Secure
para prevenir el acceso del lado del cliente y asegurar una comunicación segura.
Una sesión por RP único
Para cada RP al que el usuario accede desde diferentes dispositivos o navegadores, se establecerá una sesión de inicio de sesión de usuario separada. Esto significa que el estado de autenticación del usuario se mantiene por separado para cada RP. Si el usuario cierra sesión de un RP, el usuario seguirá autenticado en otros RPs hasta que la sesión expire o el usuario cierre sesión de todos los RPs.
Sesión centralizada para múltiples RPs
Esta gestión de sesión centralizada también permite al IdP mantener un estado de autenticación coherente a través de múltiples RPs mientras la sesión del usuario esté activa y las solicitudes de autenticación provengan del mismo agente de usuario (dispositivo/navegador). Este mecanismo habilita capacidades SSO, donde el usuario puede acceder a múltiples RPs sin tener que iniciar sesión nuevamente.
Estado de autenticación del lado del cliente
En OIDC, la aplicación cliente (RP) se basa en los tokens emitidos por el IdP para verificar la identidad del usuario y el estado de autenticación o autorización. La "sesión de inicio de sesión" del lado del cliente se mantiene mediante los tokens emitidos por el IdP.
- ID Token: Un token de corta duración que contiene información del usuario y se utiliza para verificar la identidad del usuario autenticado.
- Access Token: Un token que otorga acceso a recursos protegidos en nombre del usuario. La duración del token de acceso puede ser corta o larga, dependiendo de la configuración. Las aplicaciones cliente pueden confiar en la validez del token de acceso para determinar el estado de autenticación del usuario. Si el token de acceso ha expirado o se ha eliminado, el usuario puede considerarse como "cerrado sesión" o "no autenticado" y necesita autenticarse nuevamente.
- Refresh Token: Si el alcance
offline_access
se solicita y se concede, la aplicación cliente puede recibir un token de actualización. Proporciona un medio para extender el estado de autenticación del usuario sin requerir que el usuario se autentique nuevamente. La aplicación cliente puede usar el token de actualización para obtener un nuevo token de acceso cuando el token de acceso actual expire. Mientras el token de actualización sea válido, el estado de autenticación del usuario puede mantenerse sin necesidad de interacción del usuario.
La combinación de estos tokens permite a la aplicación cliente mantener el estado de autenticación del usuario y acceder a recursos protegidos en nombre del usuario. La aplicación cliente necesita almacenar de manera segura estos tokens y gestionar su ciclo de vida. (Por ejemplo, para aplicaciones SPA, los tokens pueden almacenarse en el almacenamiento local o almacenamiento de sesión del navegador. Para aplicaciones web, los tokens pueden almacenarse en datos de sesión del lado del servidor o cookies.)
Mecanismos de cierre de sesión OIDC
El proceso de cierre de sesión en OIDC es un concepto multifacético debido a la participación de sesiones de inicio de sesión centralizadas gestionadas por el IdP y tokens del lado del cliente distribuidos.
Limpiar tokens y sesión local en el lado del cliente
Cerrar sesión o revocar el estado de autenticación de un usuario en el lado del cliente es relativamente sencillo. La aplicación cliente puede eliminar los tokens almacenados (ID token, access token y refresh token) de la memoria o el navegador del usuario. Esta acción invalida efectivamente el estado de autenticación del usuario en el lado del cliente.
Para aplicaciones web que gestionan sus propias sesiones de inicio de sesión de usuario, pueden ser necesarios pasos adicionales. Estos incluyen eliminar la cookie de sesión y cualquier dato de sesión (como tokens emitidos por el Proveedor de Identidad, o IdP) para asegurar que el usuario esté completamente cerrado sesión.
Limpiar sesión de inicio de sesión centralizada en el IdP
El IdP mantiene una sesión de inicio de sesión centralizada para cada usuario. Mientras esta sesión esté activa, el usuario puede ser automáticamente reautenticado incluso si los tokens del lado del cliente han sido eliminados, permitiendo que se emitan nuevos tokens a la aplicación cliente sin requerir interacción adicional con el IdP.
Para cerrar sesión completamente a un usuario del IdP, la aplicación cliente (RP) puede iniciar una solicitud de cierre de sesión al IdP. La aplicación (RP) debe redirigir al usuario al punto final de fin de sesión del IdP para terminar la sesión de inicio de sesión y eliminar las cookies de sesión. Esto asegura un cierre de sesión completo en todas las aplicaciones (RPs) que comparten la misma sesión centralizada. Una vez que la sesión de inicio de sesión se termina, cada vez que el IdP reciba una solicitud de token de cualquier RP vinculado que comparta la misma sesión, el IdP pedirá al usuario que se vuelva a autenticar.
Cierre de sesión del canal de retorno OIDC
En algunos casos, cuando un usuario cierra sesión de una aplicación (RP), también pueden querer cerrar sesión automáticamente de todas las demás aplicaciones (RPs) sin ninguna interacción adicional del usuario. Esto se puede lograr utilizando el mecanismo cierre del canal de retorno.
Cuando el IdP recibe una solicitud de cierre de sesión de un RP, no solo elimina la sesión de inicio de sesión, sino que también envía una notificación de cierre del canal de retorno a todos los RPs que usan la misma sesión y tienen un punto final de cierre del canal de retorno registrado.
Cuando los RPs reciben la notificación de cierre del canal de retorno, pueden realizar las acciones necesarias para eliminar la sesión y los tokens del usuario, asegurando que el usuario esté completamente cerrado sesión de todas las aplicaciones.