Queremos utilizar la Subvención implícita OAuth2 tal como se propone para aplicaciones de una sola página. Para aplicaciones de JavaScript que no tienen una sesión web clásica. Las aplicaciones solo tienen tokens de acceso que caducan después de una hora. Utilizamos un servicio de autenticación central (CAS) donde el usuario podría tener una sesión.
Al principio el usuario no tiene ninguna sesión. Cuando el usuario inicia la aplicación JS, navega el agente de usuario al CAS donde se autentica a través de sus credenciales. Después de la autenticación exitosa, será redirigido a la aplicación JS con el token de acceso en el fragmento.
Después de poco tiempo, el token de acceso ya no es válido y la aplicación necesita un token de acceso nuevo. Para eso la aplicación navega de nuevo el agente de usuario al CAS. Las preguntas son: ¿qué debería hacer el CAS?
-
El usuario ya tiene una sesión en el CAS. ¿Se permite usar esta sesión para autenticar al usuario? En este caso, el usuario no tiene que volver a proporcionar sus credenciales.
-
El servicio de autenticación central podría solicitar las credenciales del usuario nuevamente.
En mi opinión, pedirle al usuario sus credenciales una vez en una hora es algo extraño, así que preferiría la primera solución. ¿Pero sería una forma válida de obtener un nuevo token de acceso con respecto al RFC de OAuth2?
El RFC indica " The implicit grant [...] relies on the presence of the resource owner
". Creo que la primera solución no se basa en la presencia del propietario del recurso. Por ejemplo, el propietario del recurso podría dejar su computadora por algunas horas, pero la aplicación JS todavía está funcionando. Si un token de acceso deja de ser válido, la aplicación JS puede obtener un nuevo token de acceso simplemente navegando al CAS, que se autentica automáticamente a través de la sesión y se redirige a la aplicación JS. Esto se hace automáticamente sin la presencia del propietario del recurso.
El CAS solo podría estar seguro de que el propietario del recurso está presente si solicitaría las credenciales nuevamente. Pero eso significaría pedir las credenciales cada 30 minutos.
Si estas opciones no se aplican, ¿cómo se podría realizar el paso (B) en la Figura 4 en 4.2 del RFC6749 para renovar los tokens de acceso?