Eu tive que cavar nisso por meus próprios motivos e escrevi, então vou postar o que aprendi aqui ...
Em primeiro lugar, responderei à pergunta correndo o risco de afirmar o óbvio: o token de ID não é confiável e seu conteúdo deve ser ignorado se o tempo atual for maior que o tempo expirado. A resposta do questionador afirma que, após a autenticação inicial do usuário, o token de identificação não é usado novamente. No entanto, como o token de identificação é assinado pelo provedor de identidade, certamente pode ser útil a qualquer momento fornecer uma maneira confiável de determinar quem é o usuário para outros serviços que um aplicativo possa estar usando. Usar um simples ID de usuário ou endereço de e-mail não é confiável porque pode ser facilmente falsificado (qualquer pessoa pode enviar um endereço de e-mail ou ID de usuário), mas uma vez que um token de ID OIDC é assinado pelo servidor de autorização (que geralmente também tem a vantagem de ser um terceiro), não pode ser falsificado e é um mecanismo de autenticação muito mais confiável.
Por exemplo, um aplicativo móvel pode querer dizer a um serviço de back-end quem é o usuário que está usando o aplicativo e pode precisar fazer isso após o breve período após a autenticação inicial, momento em que o token de ID expira, e, portanto, não pode ser usado para autenticar o usuário de forma confiável.
Portanto, assim como o token de acesso (usado para autorização - especificando quais permissões o usuário tem) pode ser atualizado, você pode atualizar o token de ID (usado para autenticação - especificando quem é o usuário)? De acordo com a especificação OIDC, a resposta não é óbvia. No OIDC / OAuth, há três "fluxos" para obter tokens, o fluxo do Código de autorização, o fluxo Implícito e o fluxo Híbrido (que ignorarei abaixo porque é uma variante dos outros dois).
Para o fluxo implícito em OIDC / OAuth, você solicita o token de ID no terminal de autorização redirecionando o usuário no navegador para o terminal de autorização e incluindo id_token
o valor do response_type
parâmetro de solicitação. Uma resposta de autenticação bem-sucedida de fluxo implícito é NECESSÁRIA para incluir o id_token
.
Para o fluxo do Código de autenticação , o cliente especifica code
como o valor do response_type
parâmetro de solicitação ao redirecionar o usuário para o terminal de autorização. Uma resposta bem-sucedida inclui um código de autorização. O cliente cliente faz uma solicitação ao terminal de token com o código de autorização e, de acordo com o OIDC Core Seção 3.1.3.3 Resposta de Token com Sucesso, a resposta DEVE incluir um Token de ID .
Portanto, para qualquer um dos fluxos, é assim que você obtém inicialmente o token de ID, mas como você o atualiza? A seção 12 do OIDC: Usando tokens de atualização contém a seguinte declaração sobre a resposta do token de atualização:
Após a validação bem-sucedida do token de atualização, o corpo da resposta é a resposta do token da Seção 3.1.3.3, exceto que pode não conter um id_token .
Ele pode não conter um token de ID e, como não há nenhuma maneira especificada de forçá-lo a incluir o token de ID, você deve presumir que a resposta não conterá o token de ID. Portanto, tecnicamente, não há uma maneira especificada de "atualizar" um token de ID usando um token de atualização. Portanto, a única maneira de obter um novo token de ID é reautorizar / autenticar o usuário redirecionando-o para o terminal de autorização e iniciando o fluxo implícito ou o fluxo de código de autenticação conforme descrito acima. A especificação OIDC adiciona um prompt
parâmetro de solicitação à solicitação de autorização para que o cliente possa solicitar que o servidor de autorização não solicite ao usuário nenhuma IU, mas o redirecionamento ainda precisa acontecer.