Docs
...

OAuth 2.0

JWT

O JSON Web Token (JWT) é um padrão aberto (RFC 7519)JWT que define uma maneira compacta e autossuficiente para representar informações entre duas partes. Essas informações podem ser verificadas e confiáveis, tornando os JWTs ideais para transmitir dados entre sistemas. Na iugu, utilizamos o protocolo OAuth 2.0 (Open Authorization), para delegar autorização entre as aplicações e os JWTs são os tokens enviados e recebidos nesse processo de autorização, podendo ser um access_token, um id_token ou um refresh_token.

Estes tokens garantem a segurança e integridade das informações transmitidas entre as partes: o servidor de autorização, o servidor de recursos e o cliente.

O JWT é composto por três partes: o cabeçalho (header), a carga útil (payload) e a assinatura (signature). O cabeçalho geralmente especifica o tipo do token e o algoritmo de assinatura, enquanto a carga útil contém as informações do token, e a assinatura é utilizada para verificar a autenticidade do remetente.

Exemplo simples de JWT:

Cabeçalho (Header):

Tipo do Token (typ): JWT Algoritmo de Assinatura (alg): HMAC SHA256 Carga Útil (Payload):

Emissor (iss): “minha_app” Identificador do Usuário (sub): 123456 Tempo de Expiração (exp): 1641100000 (timestamp)

graph TD A[Cabeçalho] -->|Base64| B B -->|Decodificação| C[Cabeçalho Decodificado] D[Carga Útil] -->|Base64| E E -->|Decodificação| F[Carga Útil Decodificada] G[Assinatura] --> H C --> I[Algoritmo SHA256] F --> I I -->|Verificação| H[Assinatura Válida?]

No OAuth 2.0, os access_token, id_token e refresh_token são tokens JWT obtidos por meio do processo que envolve as seguintes etapas:

  • Autenticação do Cliente (Client Authentication): O cliente autentica-se junto ao servidor de autorização para obter um token de acesso. Esta etapa envolve a criação e registro de sua aplicação e obtenção do client_credentials (client_id e client_secret) na área de trabalho do console Primeiros Passos.

  • Concessão de Autorização (Authorization Grant): O cliente recebe uma concessão de autorização, com base no fluxo do grant_type enviado (client_credentials / authorization_code), indicando que está autorizado a acessar recursos em nome do usuário.

  • Emissão do Token (Token Issuance): Com a concessão de autorização, o servidor de autorização emite um token JWT contendo informações como escopo, tempo de expiração e a audiência correta, que é a quem aquele token se destina e por quem pode ser usado.

  • Renovação de Autorização (Refresh Token Grant): No fluxo de autorização o servidor de autorização emite um token JWT com o access token, um id token e um refresh token em sua carga útil. O Refresh token pode ser utilizado para renovar a autorização concedida uma vez que o JWT é stateless e por isso não pode ser revogado, sendo assim, possui uma duração mínima estabelecida que garante a sua revogação.

A duração do token bem como outras informações são chamadas de Claims. Cada claim possui uma função específica para determinar a validade do JWT emitido.