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

Entendendo 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 o 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 os tokens de acesso, tokens de atualização e um token de ID no OIDC?

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

Imagine que você está desenvolvendo uma aplicação típica cliente-servidor, e eles se comunicam entre si através de APIs RESTful. Você quer manter a maioria das suas APIs privadas, permitindo apenas que clientes autorizados acessem. Você precisará de um mecanismo para autenticar o cliente e autorizar as solicitações de 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 solicitação válida chegar, o servidor deve apenas responder com os dados solicitados. É aqui que os tokens entram em cena. 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 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, geralmente através do cabeçalho da solicitação e no formato JWT.

No lado do servidor, sempre que uma solicitação chega, o servidor só precisa validar se a solicitaçã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, assim como a alegaçã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 preciso dos outros tokens?

De fato, uma pergunta válida, e vamos explicar 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, devido a preocupaçõ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 re-autenticar toda vez que o token de acesso expirasse. Para aplicações web modernas de página única (SPAs) e especialmente aplicações móveis, frequentemente sair é uma experiência de usuário bastante dolorosa, mesmo que estejamos apenas tentando proteger sua segurança.

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 são introduzidos.

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

Os 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, já que os tokens de atualização são usados apenas para troca de novos tokens de acesso, eles não são usados com tanta frequência quanto os tokens de acesso e, assim, 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

Uma vez que o token de atualização também é armazenado no lado do cliente, garantir que eles não sejam comprometidos é 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 uma vez que ele atenda aos critérios:

  • Aplicações de página única: Reconhecidas como clientes não restritos ao remetente, esses apps exigem rotação de token de atualização. O tempo de vida (TTL) do token de atualização não pode ser especificado.
  • Apps nativas e apps web tradicionais: A rotação do token de atualização é inerentemente ativada, renovando automaticamente ao atingir 70% do seu TTL. Saiba mais

Embora você ainda tenha a opção de desabilitar a rotação do token de atualização na página de detalhes da aplicação no console de administração, é fortemente recomendado manter essa medida de proteção.

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

O token de ID é uma característica única 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 os 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 solicitaçõ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 lidar com tokens

  • Use HTTPS: Sempre use HTTPS para proteger a comunicação entre o cliente e o servidor de autorização. Isso impede que partes não autorizadas interceptem e roubem tokens.
  • Defina tempo de expiração apropriado 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 do token de atualização: Implemente a rotação do token de atualização para mitigar o risco de vazamento do token de atualização.
  • Use controle de acesso granular: Use escopos granulares para limitar as permissões dos tokens de acesso. Solicite apenas as permissões necessárias para a aplicação cliente. Evite usar escopos "todos" ou "admin" para contornar a maioria das verificações de permissão, a menos que absolutamente necessário.

Recapitulação: Principais diferenças entre 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 fornecer autenticação segura e contínua para o usuário.

  • 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 de usuário em cache no cliente, melhorando o desempenho.

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