• OIDC
  • SSO
  • autenticación

Implementación de cierre de sesión y gestión de sesión OIDC: Una guía completa

Explora la autenticación OIDC y la gestión de sesiones en profundidad. Aprende cómo implementar el cierre de sesión RP-iniciado, IdP-iniciado y por canal de fondo de OIDC para un manejo seguro de sesiones.

Simeng
Simeng
Developer

¿Qué es la gestión de sesión 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 basada en la autenticación realizada por el servidor de autorización, así como obtener información básica del perfil del usuario final de manera 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 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 y el estado de autenticación de usuario en el contexto de las interacciones entre el Proveedor de Identidad (IdP) y la Parte Confiante (RP) o Proveedor de Servicio (SP).

Este artículo incluye varios términos clave:

  • Proveedor de Identidad (IdP): El servicio que almacena y autentica las identidades de los usuarios.
  • Proveedor de Servicio (SP) o Parte Confiante (RP): Una aplicación web o servicio que proporciona servicios a los usuarios y depende del IdP para la autenticación de 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 de 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 del estado de sesión y autenticación de usuario OIDC, revisemos brevemente el flujo de autenticación OIDC para una aplicación web:

  1. El usuario accede a la aplicación web (RP).
  2. El RP redirige al usuario al proveedor OIDC (IdP) para la autenticación.
  3. El proveedor OIDC verifica el estado de la sesión de inicio de sesión del usuario. Si no existe una sesión o la sesión ha expirado, se solicita al usuario iniciar sesión.
  4. El usuario interactúa con la página de inicio de sesión para ser autenticado.
  5. La página de inicio de sesión envía el resultado de la interacción al proveedor OIDC.
  6. El proveedor OIDC crea una nueva sesión de inicio de sesión y concesión de autenticación para el usuario.
  7. El proveedor OIDC redirige al usuario de vuelta al RP con un código de autenticación (Flujo de Código de Autorización).
  8. 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 sesión 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.

Una cookie de sesión se establecerá 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 establece con las banderas HttpOnly y Secure para prevenir acceso del lado del cliente y asegurar una comunicación segura.

Una sesión para único RP

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 la sesión de un RP, el usuario seguirá autenticado en otros RPs hasta que la sesión expire o el usuario cierre sesión en todos los RPs.

Sesión centralizada para múltiples RPs

Esta gestión centralizada de sesiones también permite al IdP mantener un estado de autenticación consistente a través de múltiples RPs siempre que la sesión del usuario esté activa y las solicitudes de autenticación provengan del mismo agente de usuario (dispositivo/navegador). Este mecanismo permite capacidades de SSO, donde el usuario puede acceder a múltiples RPs sin necesidad de iniciar sesión nuevamente.

Estado de autenticación del lado del cliente

En OIDC, la aplicación cliente (RP) depende de los tokens emitidos por el IdP para verificar la identidad y el estado de autenticación o autorización del usuario. La "sesión de inicio de sesión" del lado del cliente se mantiene por 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 concede acceso a recursos protegidos en nombre del usuario. La vida útil del token de acceso puede ser de corta o larga duración, dependiendo de la configuración. Las aplicaciones cliente pueden depender de la validez del token de acceso para determinar el estado de autenticación del usuario. Si el token de acceso está expirado o borrado, el usuario puede considerarse como "desconectado" o "no autenticado" y necesitará reautenticarse.
  • Refresh Token: Si se solicita y concede el alcance offline_access, 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 reautentique. La aplicación cliente puede usar el token de actualización para obtener un nuevo token de acceso cuando el token de acceso actual expira. Siempre que 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 estos tokens de forma segura y gestionar su ciclo de vida. (Por ejemplo, para aplicaciones SPA, los tokens pueden almacenarse en el almacenamiento local o de sesión del navegador. Para aplicaciones web, los tokens pueden almacenarse en los datos de sesión del lado del servidor o en cookies.)

Mecanismos de cierre de sesión OIDC

El proceso de cierre de sesión en OIDC es un concepto con múltiples facetas debido a la participación de sesiones de inicio de sesión gestionadas por el IdP centralizado y tokens del lado del cliente distribuidos.

Borrar 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) del navegador o memoria 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, pueden ser necesarios pasos adicionales. Estos incluyen limpiar 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 desconectado.

Borrar 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 borrados, permitiendo que nuevos tokens se emitan a la aplicación cliente sin requerir más interacción con el IdP.

Para cerrar completamente la sesión de 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 endpoint de fin de sesión del IdP para terminar la sesión de inicio de sesión y borrar 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 ha terminado, siempre que el IdP reciba una solicitud de token de cualquier RP vinculado que comparta la misma sesión, el IdP solicitará al usuario reautenticarse.

Cierre de sesión en segundo plano de OIDC

En algunos casos, cuando un usuario cierra sesión de una aplicación (RP), también puede querer desconectarse automáticamente de todas las demás aplicaciones (RPs) sin ninguna interacción adicional del usuario. Esto puede lograrse utilizando el mecanismo de cierre de sesión en segundo plano.

Cuando el IdP recibe una solicitud de cierre de sesión de un RP, no solo borra la sesión de inicio de sesión, sino que también envía una notificación de cierre de sesión en segundo plano a todos los RPs que utilizan la misma sesión y tienen un endpoint de cierre de sesión en segundo plano registrado.

Cuando los RPs reciben la notificación de cierre de sesión en segundo plano, pueden realizar las acciones necesarias para borrar la sesión y los tokens del usuario, asegurando que el usuario esté completamente desconectado de todas las aplicaciones.