Português (Brasil)
  • token
  • oidc
  • refresh token
  • access token
  • ID token

Compreendendo tokens de acesso, tokens de atualização e tokens de ID no protocolo OpenID Connect (OIDC)

O Protocolo OpenID Connect (OIDC) emergiu como um padrão amplamente adotado para gerenciamento de identidade. Mas você realmente entende os papéis e atributos desses tokens?

Charles
Charles
Developer

OIDC, OAuth 2.0 e tokens

O Protocolo OpenID Connect, também conhecido como OIDC, emergiu como um padrão amplamente adotado para fornecer uma estrutura fundamental para gerenciamento de identidade. É uma camada de autenticação construída sobre o conhecido protocolo OAuth 2.0. Enquanto o OAuth 2.0 é apenas para autorização de recursos, o OIDC é o protocolo que padroniza e fortalece a autenticação do cliente, com a ajuda do novo token de ID introduzido.

Espere... Você pode ter ouvido falar de tokens de acesso e tokens de atualização na era do OAuth, e agora surge o novo conceito no OIDC? Você realmente entende as diferenças entre esses tokens?

O que são tokens de acesso, tokens de atualização e tokens de ID no OIDC?

Vamos começar com um cenário prático.

Imagine que você está desenvolvendo uma aplicação cliente-servidor típica, e elas se comunicam entre si através de APIs RESTful. Você quer manter a maioria de suas APIs privadas, permitindo acesso apenas a clientes autorizados. Você precisará de um mecanismo para autenticar o cliente e autorizar as requisições da API para o seu servidor.

Idealmente, suas APIs RESTful devem ser sem estado, o que significa que o servidor não deve armazenar nenhuma informação de sessão do cliente. Sempre que uma requisição válida chegar, o servidor deve apenas responder com os dados solicitados. É aí que os tokens entram em ação. Então, que tipo de token você deve usar nesse caso?

Tokens de acesso são usados para proteger suas APIs

No OAuth 2.0 e no OIDC, cada API protegida é tratada como um recurso. O token de acesso é o próprio token que o cliente transmite para o servidor ao solicitar um recurso de API, normalmente através do cabeçalho da solicitação e no formato JWT.

Do lado do servidor, sempre que chega uma requisição, o servidor só precisa validar se a requisição recebida carrega um token de acesso válido. O processo de validação geralmente inclui decodificar o token JWT, verificar a assinatura e o tempo de expiração, bem como a reivindicação de escopo para garantir que o cliente tenha as permissões necessárias.

No entanto, você pode se perguntar: Se minha aplicação cliente pode ter um token de acesso válido após um login bem-sucedido e usar o token de acesso para solicitar APIs do servidor, isso não é suficiente? Por que eu precisaria dos outros tokens?

De fato, uma pergunta válida, e vamos explicar isso passo a passo.

Por que precisamos de tokens de atualização?

Embora tecnicamente os tokens de acesso atendam aos requisitos mínimos para fazer o sistema funcionar, no entanto, por questões de segurança, a validade dos tokens de acesso geralmente é muito curta (tipicamente uma hora). Então imagine se tivéssemos apenas tokens de acesso, os usuários finais teriam que se reautenticar toda vez que o token de acesso expirasse. Para aplicações web de página única modernas (SPAs) e especialmente aplicações móveis, sair frequentemente é uma experiência de usuário bastante dolorosa, mesmo que estejamos apenas tentando proteger a segurança do usuário.

Portanto, precisamos de um equilíbrio entre a segurança dos tokens e a conveniência do usuário. É por isso que os tokens de atualização foram introduzidos.

Por que os tokens de atualização podem ter uma longa vida útil?

Tokens de acesso são usados para acessar recursos de API, então sua natureza de curta duração ajuda a mitigar o risco de serem vazados ou comprometidos. Por outro lado, como os tokens de atualização são usados apenas para trocar por novos tokens de acesso, eles não são usados tão frequentemente quanto tokens de acesso e, portanto, o risco de exposição é reduzido. Portanto, ter um período de validade mais longo é considerado aceitável para tokens de atualização.

Garantindo a segurança do token de atualização

Como o token de atualização também é armazenado no lado do cliente, garantir que não comprometam é desafiador, especialmente para clientes públicos, como aplicações web de página única (SPA) e aplicativos móveis.

No Logto, os tokens de atualização têm um mecanismo de rotação automático habilitado por padrão, o que significa que o servidor de autorização emitirá um novo token de atualização assim que ele atender aos critérios:

  • Aplicações de página única: Reconhecidos como clientes não restritos por remetente, esses aplicativos exigem rotação de token de atualização. O tempo de vida (TTL) do token de atualização não pode ser especificado.
  • Aplicativos nativos e aplicativos web tradicionais: A rotação de token de atualização é inerentemente ativada, renovando automaticamente ao alcançar 70% de seu TTL. Saiba mais sobre rotação de token de atualização no Logto

Embora você ainda tenha a opção de desativar a rotação de token de atualização na página de detalhes da aplicação no console de administração, é altamente recomendado manter esta medida de segurança.

O que é um token de ID e por que é importante?

O token de ID é um recurso exclusivo do OIDC que fornece informações de identidade sobre o usuário autenticado.

Enquanto os tokens de acesso são usados para acessar recursos protegidos e tokens de atualização são usados para obter novos tokens de acesso, os tokens de ID são tipicamente usados para armazenar em cache informações do usuário no lado do cliente, reduzindo a necessidade de fazer requisições adicionais ao servidor de autorização para dados do usuário. Na maioria dos casos, é até seguro dizer que ter o token de ID é equivalente ao usuário estar autenticado.

Melhores práticas para manuseio de tokens

  • Use HTTPS: Sempre use HTTPS para proteger a comunicação entre o cliente e o servidor de autorização. Isso previne que partes não autorizadas interceptem e roubem tokens.
  • Defina o tempo de expiração adequado para tokens: Tokens de acesso devem ter uma vida útil curta para minimizar o risco de exposição. Tokens de atualização podem ter um período de validade mais longo.
  • Habilite a rotação de token de atualização: Implemente a rotação de token de atualização para mitigar o risco de vazamento do token de atualização.
  • Use controle de acesso refinado: Use escopos refinados para limitar as permissões dos tokens de acesso. Solicite apenas as permissões necessárias para a aplicação cliente. Evite usar "all" ou "admin" para burlar a maioria das verificações de permissão, a menos que absolutamente necessário.

Recapitulação: Principais diferenças de tokens de acesso, tokens de atualização e tokens de ID no OIDC

No protocolo OIDC, tokens de atualização, tokens de acesso e tokens de ID trabalham juntos para proporcionar autenticação de usuário segura e perfeita.

  • Tokens de acesso fornecem autorização para acessar recursos protegidos.
  • Tokens de atualização eliminam a intervenção do usuário para novos tokens de acesso.
  • Tokens de ID fornecem informações do usuário em cache no cliente, melhorando o desempenho.

Entender o papel e a importância desses tokens é crucial para desenvolvedores que implementam autenticação OIDC em suas aplicações.