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:
- Token de acesso (Access token) : Um token que concede acesso a recursos protegidos.
- Token de ID (ID token) : Um token que contém informações do usuário (específico do OIDC).
- Token de atualização (Refresh token) : Um token que pode ser usado para obter um novo access token sem interação do usuário.
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 incluemauthorization_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.