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 a gestão de identidade. Mas você realmente entende os papéis e atributos destes tokens?
OIDC, OAuth 2.0, e tokens
O Protocolo OpenID Connect, também conhecido como OIDC, surgiu como um padrão amplamente adotado para fornecer uma estrutura fundamental para a gestão 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 de 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 OAuth, e agora surge o novo conceito no OIDC? Você realmente entende as diferenças entre estes tokens?
O que são os 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 típica cliente-servidor, e eles se comunicam entre si por meio de APIs RESTful. Você deseja manter a maioria das suas APIs privadas, permitindo apenas clientes autorizados para acessar. 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 jogo. Então, que tipo de token você deve usar neste caso?
Tokens de acesso são usados para proteger as 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 ao servidor ao solicitar um recurso de API, tipicamente 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 a decodificação do token JWT, a verificação da assinatura e do tempo de expiração, bem como a verificação da declaraçã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 preciso dos outros tokens?
De fato, uma pergunta válida, e vamos explicá-la 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 tivermos apenas tokens de acesso, os usuários finais terão que se reautenticar sempre que o token de acesso expirar. Para aplicações web modernas de página única (SPAs) e especialmente aplicações móveis, sair com frequência é uma experiência de usuário bastante dolorosa, embora 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 foram 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, como os tokens de atualização são usados apenas para trocar por novos tokens de acesso, eles não são usados com a mesma frequência que os 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 eles não sejam comprometidos é um desafio, 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-restringidos pelo remetente, estes aplicativos exigem rotação de tokens 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 tokens de atualização é inerentemente habilitada, renovando automaticamente ao atingir 70% de seu TTL. Saiba mais
Embora você ainda tenha a opção de desativar a rotação de tokens de atualização na página de detalhes da aplicação no console administrativo, é fortemente recomendado manter esta 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ção 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 informações de 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 a o usuário estar autenticado.
Melhores práticas para lidar com tokens
- Utilizar 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.
- Definir 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.
- Habilitar rotação de tokens de atualização: Implementar rotação de tokens de atualização para mitigar o risco de vazamento de tokens de atualização.
- Usar controle de acesso detalhado: Use escopos detalhados 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 ignorar a maioria das verificações de permissão, a menos que seja absolutamente necessário.
Recapitulação: Principais diferenças dos 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 segura e contínua do 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 armazenadas no cliente, melhorando o desempenho.
Compreender o papel e a importância destes tokens é crucial para os desenvolvedores implementarem a autenticação OIDC em suas aplicações.