OpenID Connect: ¿Cómo mantener una experiencia de inicio de sesión único entre varios clientes web de la misma aplicación general?

0

Estoy considerando cómo tomar una aplicación en niveles bastante compleja con varias aplicaciones web que se delegan de nuevo en el mismo servidor de aplicaciones, y migrarla para usar la autenticación OIDC con flujo de código de autenticación. Estoy anticipando el uso del servidor de identidad 4.

Mi pregunta es: ¿cuál sería la mejor práctica aceptada en términos de mantener una experiencia de inicio de sesión único entre estas diferentes aplicaciones de cliente web (es decir, el usuario inicia sesión en una, ha iniciado sesión en todas ellas hasta que cierre sesión).

enlace sugiere:

  

Tenga en cuenta que la audiencia (reclamación de aud) del [token de identificación] está configurada con el identificador del cliente, lo que significa que solo este cliente específico debe consumir este token.

Esto sugiere que debería considerar que mi servidor de aplicaciones backend es mi único "cliente" y que mis aplicaciones web compartan la misma ID de cliente. Puedo imaginarme haciendo esto almacenando el lado del navegador del token de identificación en una cookie segura.

enlace parece validar esta idea:

  

Poner en una cookie del navegador el token de ID se puede usar para implementar sesiones ligeras sin estado.

Pero me pregunto si es una buena práctica de seguridad mantener un id_token en una cookie.

Me pregunto si hay otros enfoques, como:

  • Considerando cada aplicación web como un 'cliente' separado
  • Cuando el usuario inicie sesión en una segunda aplicación web, pídale que se dirija directamente al proveedor de OIDC, lo que crearía automáticamente un token de cliente para el nuevo cliente basándose en la idea de que aún están básicamente "conectados" al OP.

Parece que este debe ser un problema resuelto. ¿Cuál es la mejor práctica aceptada aquí?

    
pregunta 10.01.2018 - 07:28
fuente

1 respuesta

1

Básicamente, obtienes el inicio de sesión único con IdSrv4. Una vez que haya iniciado sesión en IdSrv, su navegador enviará la cookie IdSrv junto con cada solicitud a IdSrv. Entonces, cuando su primera aplicación web envíe una solicitud de autenticación, se le pedirá que se autentique a nivel de IdSrv. En ese momento, se creará la cookie de autenticación y (dependiendo del flujo que esté usando) se creará un código y / o tokens. regresó a su aplicación cliente. Cuando su segunda aplicación web envíe una solicitud de autenticación a IdSrv, el navegador enviará la cookie de autenticación junto con esa solicitud, por lo que seguirá autenticado a nivel de IdSrv (suponiendo que la cookie no haya caducado): el código y / o los tokens se activarán automáticamente. ser devuelto a su segundo cliente sin que el usuario tenga que proporcionar sus credenciales nuevamente.

Recomendaría no reutilizar el mismo ID de cliente (y, por lo tanto, el secreto del cliente) en varias aplicaciones web: en caso de que el secreto del cliente esté expuesto para una aplicación web, esté expuesto para todos, y eso es algo que se debe evitar.

El token de identidad suele ser de corta duración: la única razón para aferrarse a él (después de usarlo para autenticarse en el nivel de su aplicación cliente) es pasarlo al punto final de la sesión como un id_token_hint cuando está registrando afuera.

Espero que esto ayude :)

    
respondido por el Kevin Dockx 29.01.2018 - 18:39
fuente

Lea otras preguntas en las etiquetas