Tengo un proyecto que usa node-oidc-provider y angular-oauth2-oidc.
Sin embargo, una cosa es extraña, la solicitud de token de actualización usa prompt=consent (sé que es por especificación) que devuelve 303 con la ubicación que incluye el código en el hash, el token se actualiza pero parece una UX terrible si la aplicación SPA se actualiza en medio del usuario interacción , ¿es este el comportamiento esperado o algo en mi configuración está mal?
¿Hay alguna forma de obtener un token de actualización a través del canal secundario como la solicitud AJAX (me gustaría evitar los iframes si es posible)? No puedo encontrar ninguna especificación sobre cómo debería funcionar.
OPCIÓN 1
La solución SPA tradicional es usar una redirección de flujo de código de autorización (PKCE) en un iframe oculto usando prompt=none . Esto evita actualizar el SPA ya que se ejecuta en una mini aplicación como en este código . Sin embargo, esto ya no es confiable debido a las recientes restricciones del navegador que eliminan la cookie SSO, por ejemplo, en Safari.
OPCION 2
Otra opción es utilizar un mensaje de concesión de token de actualización en una solicitud de Ajax. Pero esto se basa en almacenar un token de actualización en el almacenamiento local del navegador para superar los problemas de recarga de la página. Y esto no se considera seguro y no es probable que le vaya bien en las pruebas PEN, etc.
OPCIÓN 3
La opción preferida en estos días es una variación de la opción 2, donde el token de actualización se almacena en una cookie cifrada solo HTTP segura. Es posible emitir cookies a través de una API, si desea evitar afectar la arquitectura web, aunque es un poco complicado. Consulte esta publicación de blog de Curity para obtener más información sobre este enfoque y este ejemplo de código .