Tuve que profundizar en esto por mis propias razones y lo escribí, así que publicaré lo que aprendí aquí ...
Primero, responderé la pregunta a riesgo de decir lo obvio: no se puede confiar en el token de ID y su contenido debe ignorarse si la hora actual es mayor que la hora vencida. La respuesta del interlocutor indica que después de la autenticación inicial del usuario, el token de identificación no se vuelve a utilizar. Sin embargo, dado que el ID Token está firmado por el proveedor de identidad, ciertamente podría ser útil en cualquier momento para brindar una forma de determinar de manera confiable quién es el usuario para otros servicios que una aplicación podría estar usando. Usar un ID de usuario o una dirección de correo electrónico simples no es confiable porque se puede falsificar fácilmente (cualquiera puede enviar una dirección de correo electrónico o ID de usuario), pero dado que el servidor de autorización firma un token de ID de OIDC (que también suele tener la ventaja de ser un tercero), no se puede falsificar y es un mecanismo de autenticación mucho más confiable.
Por ejemplo, es posible que una aplicación móvil desee poder decirle a un servicio de backend quién es el usuario que está utilizando la aplicación y es posible que deba hacerlo después del breve período posterior a la autenticación inicial, momento en el que caduca el token de identificación. y, por tanto, no se puede utilizar para autenticar de forma fiable al usuario.
Por lo tanto, al igual que el token de acceso (utilizado para la autorización, especificando qué permisos tiene el usuario) se puede actualizar, ¿ puede actualizar el token de ID (utilizado para la autenticación, especificando quién es el usuario)? Según la especificación OIDC, la respuesta no es obvia. En OIDC / OAuth hay tres "flujos" para obtener tokens, el flujo del código de autorización, el flujo implícito y el flujo híbrido (que omitiré a continuación porque es una variante de los otros dos).
Para el flujo implícito en OIDC / OAuth , solicita el token de identificación en el punto final de autorización redirigiendo al usuario en el navegador al punto final de autorización e incluyéndolo id_token
como el valor del response_type
parámetro de solicitud. Se REQUIERE una respuesta de autenticación exitosa de flujo implícito para incluir el id_token
.
Para el flujo del Código de autenticación , el cliente especifica code
como el valor del response_type
parámetro de solicitud al redirigir al usuario al punto final de autorización. Una respuesta exitosa incluye un código de autorización. El cliente realiza una solicitud al punto final del token con el código de autorización y, de acuerdo con la Sección 3.1.3.3 de OIDC Core, Respuesta de token exitosa, la respuesta DEBE incluir un token de identificación .
Entonces, para cualquier flujo, así es como obtiene inicialmente el token de identificación, pero ¿cómo lo actualiza? La Sección 12 de OIDC: El uso de tokens de actualización tiene la siguiente declaración sobre la respuesta de token de actualización:
Tras la validación exitosa del Refresh Token, el cuerpo de la respuesta es el Token Response de la Sección 3.1.3.3, excepto que puede que no contenga un id_token .
Es posible que no contenga un token de ID y, dado que no hay forma especificada para forzarlo a incluir el token de ID, debe asumir que la respuesta no contendrá el token de ID. Por lo tanto, técnicamente no hay una forma específica de "actualizar" un token de identificación utilizando un token de actualización. Por lo tanto, la única forma de obtener un nuevo Token de ID es volver a autorizar / autenticar al usuario redirigiéndolo al punto final de autorización e iniciando el flujo implícito o el flujo de código de autenticación como se describe anteriormente. La especificación OIDC agrega un prompt
parámetro de solicitud a la solicitud de autorización para que el cliente pueda solicitar que el servidor de autorización no solicite al usuario ninguna IU, pero la redirección aún tiene que ocurrir.