Logo Logo
GitHub Designed by Logto

O que é uma solicitação de token (token request)?

No OAuth 2.0 e OpenID Connect (OIDC) , uma solicitação de token (token request) é uma solicitação ao Servidor de autorização (ou Provedor OpenID (OP) no OIDC) para troca de credenciais (por exemplo, código de autorização, refresh token) por um conjunto de tokens. O conjunto de tokens geralmente inclui um ou mais dos seguintes:

Dependendo do tipo de concessão (grant type) usado, a solicitação pode incluir diferentes parâmetros e retornar diferentes tokens.

Por exemplo, no Fluxo de credenciais do cliente (Client credentials flow) , o Cliente solicita diretamente um Token de acesso (Access token) com credenciais do cliente. Aqui está um exemplo não normativo da solicitação de token:

POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
  &client_id=client-id
  &client_secret=client-secret
  &scope=read

Se a solicitação for bem-sucedida, o authorization server responde com um access token:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "access_token": "eyJhbGci...zHg",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "read"
}

Como funciona uma solicitação de token (token request)?

Como mostra o exemplo acima, a solicitação de token em si é direta. O client envia uma solicitação HTTP para o endpoint de token do authorization server com os parâmetros necessários. O authorization server valida a solicitação, processa-a e retorna os tokens na resposta.

No entanto, de acordo com o tipo de concessão (fluxo) específico usado, a solicitação de token pode precisar de mais preparação.

Fluxo de código de autorização (Authorization code flow)

No Fluxo de código de autorização (Authorization code flow) , o client primeiro obtém um código de autorização iniciando uma Solicitação de autorização (Authorization request) (ou Solicitação de autenticação (Authentication request) no OIDC) com o authorization server. Uma vez que o usuário concede permissão, o client troca o código de autorização por um access token e, opcionalmente, um refresh token via a solicitação de token.

Aqui está um diagrama de sequência simplificado do fluxo de código de autorização:

Fluxo de credenciais do cliente (Client credentials flow)

Como o exemplo na primeira seção mostra, o Fluxo de credenciais do cliente (Client credentials flow) é muito mais simples. O client solicita diretamente um access token com suas credenciais de cliente. O authorization server valida as credenciais do cliente e emite um access token se for bem-sucedido.

Aqui está um diagrama de sequência não normativo do fluxo de credenciais do cliente:

Refresh token

Em alguns tipos de concessão, o client também pode solicitar Acesso offline incluindo o escopo offline_access na solicitação de autorização. Se concedido, o authorization server emite um refresh token junto com o access token. O client pode usar o refresh token para obter um novo access token via a solicitação de token sem interação do usuário.

Aqui está um exemplo não normativo de uso de um refresh token para obter um novo access token:

POST /token HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
  &refresh_token=refresh-token
  &client_id=client-id
  &client_secret=client-secret

Outros tipos de concessão (grant types) também podem envolver solicitações de token, mas a ideia básica permanece a mesma.

Parâmetros chave em uma solicitação de token

Aqui estão alguns parâmetros chave que são comumente usados em uma solicitação de token:

  • grant_type: O tipo de concessão sendo solicitado. Valores comuns incluem authorization_code, client_credentials, refresh_token, etc.
  • client_id: O identificador do client emitido pelo authorization server.
  • client_secret: O segredo do client emitido pelo authorization server (para clients confidenciais).
  • code: O código de autorização obtido do authorization server (para o fluxo de código de autorização).
  • refresh_token: O refresh token obtido do authorization server (para atualização de access tokens).
  • scope: Os escopos (permissões) solicitados para o access token.
  • redirect_uri: O URI onde o authorization server envia a resposta (para o fluxo de código de autorização).
  • code_verifier: O verificador de código usado na extensão Chave de Prova para Troca de Código (PKCE) (para o fluxo de código de autorização).

Os parâmetros reais e seus valores dependem do tipo de concessão e dos requisitos específicos da aplicação. Antes de fazer uma solicitação de token, você deve consultar a lista completa de parâmetros para o tipo de concessão específico que está usando.

Veja também