Português (Portugal)
  • oidc
  • oauth
  • troca-de-tokens
  • openid

Compreensão da troca de tokens em OAuth/OIDC

A troca de tokens é uma extensão do OAuth que permite a clientes confiáveis obter novos tokens sem interação do utilizador, útil para personificação, automação, integração entre sistemas e migração de tokens em vários cenários.

Sijie
Sijie
Developer

Introduzida no RFC 8693, a troca de tokens é uma extensão do OAuth que permite a clientes confiáveis trocar um token existente por um novo com diferentes atributos ou escopos. Este mecanismo é particularmente útil para um serviço, uma aplicação ou um utilizador final obter um token de acesso OAuth normal através de um token pré-autorizado, sem a necessidade de passar pelo fluxo completo do OAuth.

Comparação com o fluxo do código de autorização

Primeiramente, vamos dar uma olhada no fluxo do Código de Autorização OAuth, que é o fluxo mais comum para obter um token de acesso.

E este é o fluxo de troca de tokens:

Redirecionamento

A principal diferença é que no fluxo do código de autorização, a aplicação cliente redireciona o utilizador para o servidor de autorização para obter um token de acesso. Na troca de tokens, a aplicação cliente pode trocar um token com o servidor de autorização sem envolver o utilizador no redirecionamento.

Isto ocorre porque no fluxo do código de autorização, a aplicação cliente não é "confiável" e precisa conhecer as credenciais do utilizador para obter um token de acesso. Na troca de tokens, a aplicação cliente é confiável por ter já obtido o token do utilizador, e o servidor de autorização validará o token e emitirá um novo.

Emissor de tokens e serviço de troca de tokens

No fluxo de troca de tokens, o "Auth Server" agora são dois participantes:

  1. Emissor de tokens: emite o token de sujeito para a aplicação cliente.
  2. Serviço de troca de tokens: valida o token de sujeito e emite um novo token para a aplicação cliente.

O serviço de troca de tokens é o mesmo "Auth Server" no fluxo do código de autorização, e o emissor de tokens pode ser um provedor de identidade de terceiros, ou separado do "Auth Server" como um serviço dedicado.

Quando usar troca de tokens?

O fluxo de troca de tokens pode ser realizado sem interação do utilizador, e isso é útil nos seguintes cenários:

  • Personificação: Permitir que serviços (por exemplo, microserviços de backend) ou utilizadores administradores realizem ações em nome de um utilizador sem expor credenciais completas do utilizador.
  • Automação: Permitir que serviços confiáveis realizem ações automaticamente sem intervenção manual, ou realizem testes automatizados.
  • Integração com Outros IdPs: Traduzir tokens entre diferentes sistemas de identidade para manter uma experiência de utilizador perfeita e gerir permissões efetivamente, um cenário comum é traduzir um token SSO para um token para um serviço a jusante.
  • Migração: Migrar tokens de um servidor de autorização para outro, por exemplo, de um sistema legados para um sistema moderno compatível com OAuth/OIDC.

Processo de troca de tokens

Trocar por um novo token de acesso é o caso de uso mais comum, tomaremos este como exemplo. Não limitado a tokens de acesso, a troca de tokens também pode ser usada para emitir outros tipos de tokens, como tokens de atualização, tokens de identificação, etc.

Aplicação cliente

Para realizar a troca de tokens, é necessária uma aplicação cliente registada com o servidor de autorização.

E a aplicação cliente deve ter um subject_token antes de iniciar o fluxo de troca de tokens, este token é geralmente concedido pelo servidor de autorização ou pelo provedor de identidade de terceiros confiável. Ao ter este token, a aplicação cliente agora pode ser "confiável" para trocar tokens sem a necessidade de credenciais e interação do utilizador.

Solicitação de troca de tokens

O cliente envia uma solicitação ao endpoint do token do servidor de autorização para trocar um token existente. Isto inclui o subject_token (o token a ser trocado) e, opcionalmente, o público-alvo desejado, o escopo e o tipo de token.

  1. grant_type: OBRIGATÓRIO. O valor deste parâmetro deve ser urn:ietf:params:oauth:grant-type:token-exchange que indica que uma troca de tokens está sendo realizada.
  2. subject_token: OBRIGATÓRIO. O PAT do utilizador.
  3. subject_token_type: OBRIGATÓRIO. O tipo de token de segurança fornecido no parâmetro subject_token. Um valor comum deste parâmetro é urn:ietf:params:oauth:token-type:access_token, mas pode variar com base no token sendo trocado.
  4. resource: OPCIONAL. O indicador de recurso, ajuda a especificar o recurso-alvo para o token de acesso.
  5. audience: OPCIONAL. O público-alvo do token de acesso, indicando os destinatários pretendidos do token, o servidor de autorização pode usar o valor de resource se audience não for especificado.
  6. scope: OPCIONAL. Os escopos solicitados.

Além disso, a solicitação precisa incluir as informações do cliente, que podem ser codificadas como um cabeçalho de autenticação básica ou enviadas como dados de formulário.

Aqui está um exemplo de solicitação:

Troca de tokens no Logto

O Logto suporta a troca de tokens de imediato, incluindo personificação e tokens de acesso pessoal.