J'ai dû creuser cela pour mes propres raisons et l'écrire, alors je posterai ce que j'ai appris ici ...
Tout d'abord, je répondrai à la question au risque de déclarer l'évidence: le jeton d'identification ne peut pas être approuvé et son contenu doit être ignoré si l'heure actuelle est supérieure à l'heure expirée. La réponse de l'interrogateur indique qu'après l'authentification initiale de l'utilisateur, le jeton d'identification n'est plus utilisé. Cependant, comme le jeton d'identification est signé par le fournisseur d'identité, il pourrait certainement être utile à tout moment de donner un moyen de déterminer de manière fiable qui est l'utilisateur à d'autres services qu'une application pourrait utiliser. L'utilisation d'un simple identifiant d'utilisateur ou d'une adresse e-mail n'est pas fiable car il peut être facilement usurpé (n'importe qui peut envoyer une adresse e-mail ou un identifiant d'utilisateur), mais comme un jeton d'identification OIDC est signé par le serveur d'autorisation (qui a également généralement l'avantage d'être un tiers), il ne peut pas être usurpé et est un mécanisme d'authentification beaucoup plus fiable.
Par exemple, une application mobile peut vouloir être en mesure d'indiquer à un service backend qui est l'utilisateur qui utilise l'application et il peut avoir besoin de le faire après la brève période suivant l'authentification initiale, moment auquel le jeton d'identification est expiré, et donc, ne peut pas être utilisé pour authentifier l'utilisateur de manière fiable.
Par conséquent, tout comme le jeton d'accès (utilisé pour l'autorisation - spécifiant les autorisations dont dispose l'utilisateur) peut être actualisé, pouvez-vous actualiser le jeton d'identification (utilisé pour l'authentification - en spécifiant qui est l'utilisateur)? Selon la spécification OIDC, la réponse n'est pas évidente. Dans OIDC / OAuth, il y a trois "flux" pour obtenir des jetons, le flux de code d'autorisation, le flux implicite et le flux hybride (que je sauterai ci-dessous car c'est une variante des deux autres).
Pour le flux implicite dans OIDC / OAuth, vous demandez le jeton d'identification au point de terminaison d'autorisation en redirigeant l'utilisateur dans le navigateur vers le point de terminaison d'autorisation et en l'incluant id_token
comme valeur du response_type
paramètre de demande. Une réponse d'authentification réussie de flux implicite est REQUISE pour inclure le id_token
.
Pour le flux de code d'authentification , le client spécifie code
comme valeur du response_type
paramètre de demande lors de la redirection de l'utilisateur vers le point de terminaison d'autorisation. Une réponse réussie comprend un code d'autorisation. Le client client fait une demande au point d'extrémité de jeton avec le code d'autorisation et, conformément à la section 3.1.3.3 du cœur d'OIDC, la réponse DOIT inclure un jeton d'identification .
Donc, pour l'un ou l'autre flux, c'est ainsi que vous obtenez initialement le jeton d'identification, mais comment l'actualiser? La section 12 de l'OIDC: Utilisation de jetons d'actualisation contient l'instruction suivante concernant la réponse du jeton d'actualisation:
Lors de la validation réussie du jeton d'actualisation, le corps de la réponse est la réponse de jeton de la section 3.1.3.3 sauf qu'il peut ne pas contenir un id_token .
Il peut ne pas contenir de jeton d'ID et comme il n'y a aucun moyen spécifié de le forcer à inclure le jeton d'ID, vous devez supposer que la réponse ne contiendra pas le jeton d'ID. Donc, techniquement, il n'y a pas de manière spécifiée pour «actualiser» un jeton d'identification à l'aide d'un jeton d'actualisation. Par conséquent, le seul moyen d'obtenir un nouveau jeton d'identification est de ré-autoriser / authentifier l'utilisateur en redirigeant l'utilisateur vers le point de terminaison d'autorisation et en démarrant le flux implicite ou le flux de code d'authentification comme décrit ci-dessus. La spécification OIDC ajoute un prompt
paramètre de demande à la demande d'autorisation afin que le client puisse demander que le serveur d'autorisation n'invite pas l'utilisateur avec une interface utilisateur, mais la redirection doit toujours se produire.