O que é um token opaco?
Um token opaco é uma string aleatória e única que não tem significado para o cliente, mas serve como uma chave de referência para buscar dados de autorização no banco de dados do servidor.
Tokens opacos são geralmente gerados usando um Gerador de números pseudoaleatórios criptograficamente seguro para garantir sua imprevisibilidade e segurança, e seu formato é determinado pelo seu issuer (emissor).
Aqui está um exemplo de um token opaco:
M-oxIny1RfaFbmjMX54L8Pl-KQEPeQvF6awzjWFA3iq
Qual é a diferença entre JWT (JSON Web Token) e token opaco?
A principal diferença está em como esses tokens lidam e validam informações de autorização:
Um token opaco é uma string aleatória que não contém informações em si. O servidor deve consultar seu banco de dados para recuperar quaisquer dados de autorização associados a este token. Isso torna os tokens opacos completamente dependentes do authorization server (servidor de autorização) para validação e interpretação.
JWT é um token autônomo que carrega todas as informações necessárias dentro de si.
Aqui está um exemplo de um JWT, é uma string codificada em base64:
eyJhbGciOiJIUzI1NiIs.eyJzdWIiOiIxMjM0NTY3O.SflKxwRJSMeKKF2QT4f
E contém três partes separadas por pontos:
- Header (Cabeçalho) - Contém informações sobre o tipo de token e o algoritmo usado para assinatura. Por exemplo,
{"alg": "HS256", "typ": "JWT"}
. - Payload (Carga) - Contém claims (declarações)—pedaços de informações sobre o usuário ou a autorização, como ID do usuário, tempo de expiração e scopes (escopos). Qualquer pessoa pode decodificá-lo para ver as claims porque é codificado, mas não criptografado.
- Signature (Assinatura) - Gerada combinando o cabeçalho, a carga e uma chave secreta usando o algoritmo especificado. Esta assinatura é usada para verificar a integridade do token e garantir que ele não foi adulterado.
Essa estrutura permite que os JWTs sejam validados e usados sem consultar um banco de dados.
Para informações mais detalhadas sobre JWTs, consulte JSON Web Token (JWT) .
E confira Token opaco vs JWT para aprender mais sobre suas diferenças em mais profundidade.
Como validar um token opaco
Em sistemas simples, a validação de tokens opacos é normalmente tratada diretamente pelo servidor, que consulta o banco de dados usando o token opaco como uma chave para recuperar as informações de autorização associadas.
Em sistemas multipartidários que introduzem OAuth 2.0, múltiplos resource servers (servidores de recursos) (veja: Servidor de recursos ) podem precisar validar o mesmo token opaco. OAuth 2.0 fornece um mecanismo padronizado de token introspection (introspecção de token) para essa validação:
Para informações detalhadas sobre token introspection, consulte Introspecção de token (Token introspection) .
Como os tokens opacos são usados no OIDC?
No contexto do OIDC ( OpenID Connect (OIDC) ), tokens opacos servem a propósitos específicos em diferentes cenários:
Recuperação de perfil de usuário
Por padrão, quando um cliente solicita um access token (token de acesso) sem especificar um recurso e inclui o scope openid
, o authorization server emite um access token opaco. Este token é usado principalmente para recuperar informações de perfil de usuário do endpoint OIDC /oidc/userinfo
(veja: Endpoint de userinfo ).
Troca de refresh token
Refresh tokens (tokens de atualização) (veja: Token de atualização (Refresh token) ) são tipicamente emitidos como tokens opacos, pois são trocados apenas entre o cliente e o authorization server. Quando o access token atual expira, o cliente pode usar o refresh token opaco para obter um novo access token sem re-autenticar o usuário.
Quais são os prós e contras do token opaco?
Prós
-
Segurança: Tokens opacos são perfeitos para lidar com dados sensíveis como refresh tokens. Como o conteúdo é completamente aleatório e sem significado, mesmo que alguém intercepte o token, não poderá extrair nenhuma informação útil. Isso os torna especialmente valiosos em cenários de alta segurança, como transações bancárias ou manipulação de dados sensíveis do usuário.
-
Revogabilidade: O servidor pode invalidar imediatamente um token opaco a qualquer momento. Isso é particularmente útil quando você precisa remover rapidamente o acesso do usuário. Ao contrário dos JWTs que permanecem válidos até expirarem, tokens opacos podem ser revogados instantaneamente (veja: Limitações do JWT ).
-
Tamanho: Tokens opacos são tipicamente muito mais curtos que JWTs. Esse tamanho menor reduz o uso de largura de banda de rede e os requisitos de armazenamento. O benefício se torna particularmente notável em sistemas que transmitem tokens com frequência, como aplicativos móveis ou dispositivos IoT.
-
Simplicidade: A implementação de tokens opacos é direta. Você gera uma string aleatória e a armazena com seus dados associados. Não há necessidade de lidar com criptografia complexa ou verificação de assinatura como com JWTs. Essa simplicidade os torna ideais para autenticação de sistemas internos.
Contras
-
Stateful (Com estado): Cada token opaco requer armazenamento no lado do servidor. Isso cria complexidade adicional em sistemas distribuídos porque os dados do token devem ser sincronizados entre vários servidores. Por exemplo, se você tiver múltiplos servidores de autenticação, todos eles precisam acessar o mesmo banco de dados de tokens ou sistema de cache para validar tokens corretamente.
-
Desempenho: A validação de tokens sempre requer uma consulta ao banco de dados ou chamada de API. Em sistemas de alto tráfego, essas consultas adicionais ao banco de dados podem criar gargalos de desempenho. Por exemplo, se o seu sistema lida com milhares de solicitações por segundo, cada uma exigindo validação de token, a carga adicional no banco de dados se torna significativa.
-
Interoperabilidade: Diferentes sistemas podem implementar tokens opacos de maneiras diferentes. Isso pode causar desafios de integração ao trabalhar com serviços de terceiros ou diferentes authorization servers. Embora padrões como a introspecção de tokens do OAuth 2.0 ajudem, você ainda pode encontrar problemas de compatibilidade quando sistemas usam formatos de token ou métodos de validação diferentes.