Tokens de acesso são chaves digitais que verificam e autenticam a identidade de um usuário antes de autorizá-lo a acessar recursos em diversos contextos, como interfaces de programação de aplicativos (APIs), aplicativos web e serviços em nuvem. Usados como alternativa aos sistemas tradicionais baseados em senha, os tokens de acesso atuam como prova de autorização, permitindo a comunicação segura entre clientes e servidores.
Principais elementos dos tokens de acesso
Os tokens de acesso contêm um cabeçalho, uma carga útil e uma assinatura, que trabalham juntos na verificação dos privilégios de acesso dos usuários aos recursos.
O cabeçalho contém informações sobre o tipo de token e o algoritmo usado para criá-lo. Informações sobre o usuário (por exemplo, permissões e o prazo de validade delas) estão incluídas na carga útil. A assinatura contém os dados necessários para que o destinatário verifique a autenticidade do token. Em geral, as assinaturas de token de acesso são codificadas (por exemplo, com hash) para evitar uso indevido ou replicação.
Como obter tokens de acesso
Os tokens de acesso são emitidos por meio de um token explícito de autorização ou atualização do proprietário do recurso. É possível usá-los para obter acesso posteriormente, sem ser necessário o envio de uma nova solicitação pelo usuário. No entanto, por motivos de segurança, os tokens de acesso têm vida útil reduzida. Uma vez expirado o prazo de validade, ele não pode mais ser usado.
Onde encontrar um token de acesso
Qualquer usuário conectado a um sistema ou aplicativo possui um token de acesso que é criado quando ele inicia sua sessão e efetua login no serviço. Cada processo executado como parte da sessão de um usuário possui uma cópia do token, que contém um identificador de logon seguro ou SID, que identifica a sessão atual.
Tokens de acesso e atualização podem ser armazenados em sessões do servidor, tornando-os disponíveis para solicitações originadas de código do lado do servidor. Isso é conhecido como proxy backend para frontend (BFF, Backend For Frontend). Aplicativos podem usar APIs dedicadas para armazenar tokens de acesso, mantê-los na memória ou armazená-los em cookies.
Qual a importância dos tokens de acesso
Tokens de acesso são importantes porque ajudam a proteger recursos digitais contra acesso não autorizado. Entre os benefícios que demonstram essa importância estão os seguintes:
- Maior segurança: São uma alternativa mais segura às senhas, pois são mais difíceis de roubar ou violar. Além disso, como normalmente não têm estado, o servidor não precisa armazenar informações da sessão do usuário.
- Conformidade: Podem ser configurados para incluir metadados relativos a autorização e uso. Essas informações podem ser usadas para ajudar organizações a cumprir os requisitos de conformidade, fornecendo um método claro e auditável de gerenciar e restringir o acesso a recursos confidenciais.
- Delegação de acesso: Podem ser usados para permitir que aplicativos de terceiros executem ações em nome de um usuário sem a necessidade de expor suas credenciais. São exemplos a habilitação de logins com o uso de contas de mídia social ou a integração a serviços de terceiros.
- Maior eficiência: Reduzem a sobrecarga de criptografia, pois a criação de uma única assinatura é necessária à obtenção do token.
- Controle de acesso granular: Podem ser configurados para limitar as permissões concedidas a um aplicativo cliente, reduzindo a exposição não autorizada de dados ou recursos confidenciais.
- Interoperabilidade: Permitem a interoperabilidade entre diferentes serviços e aplicativos, permitindo integração e acesso perfeitos a recursos compartilhados em ambientes distribuídos. Por exemplo, em um ecossistema de API, um serviço pode solicitar um token de acesso para interagir com outro serviço em nome de um usuário, sem a necessidade de compartilhar credenciais.
- Superfície de ataque reduzida: Podem ser programados para ter vida curta, o que atenua o potencial e o impacto de um eventual comprometimento, reduzindo a janela de oportunidade para uso indevido.
- Revogabilidade: Se houver comprometimento ou não houver mais a necessidade de um token de acesso, ele poderá ser revogado ou invalidado pelo servidor de autorização, melhorando a segurança e o controle sobre o acesso a recursos.
- Escalabilidade: Permitem ajustar a escala dos sistemas com mais eficiência, pois eles eliminam a necessidade de o servidor manter o estado da sessão. Isso é particularmente benéfico em sistemas distribuídos ou arquiteturas de microsserviços, onde os serviços podem verificar tokens de forma autônoma, sem depender de um repositório central de sessões.
- Desenvolvimento simplificado: Simplificam o processo de gerenciamento de sessões e permissões de usuários em várias partes de um aplicativo. Como podem ser facilmente transmitidos em cabeçalhos ou parâmetros de consulta, os desenvolvedores podem usá-los em diversos casos de uso visando fornecer segurança de acesso com sobrecarga mínima.
Tipos de tokens de acesso
Existem vários tipos de tokens de acesso usados nos diferentes contextos mencionados acima. A escolha do tipo de token de acesso depende de vários critérios, como requisitos de segurança, interoperabilidade e o caso de uso específico do aplicativo ou serviço.
Seja qual for o tipo de token de acesso utilizado, é importante lembrar que eles permitem o acesso a dados confidenciais e, portanto, exigem os mesmos controles de segurança que outros métodos de acesso. Os tipos de tokens de acesso comumente usados são:
1. Chaves de API
Chaves de API são usadas para identificar o programa ou usuário que faz a chamada. Elas podem ser usadas para controlar o acesso e rastrear o uso.
2. Tokens de portador
Os tokens de portador são autônomos e representam a autorização concedida ao aplicativo cliente.
Esse tipo de tokens não contém nenhuma informação sobre o usuário. Isso significa que o portador (ou seja, quem quer que possua esse token) pode usá-lo. Com frequência, eles são usados na autenticação HTTP, onde os tokens de portador são apresentados pelo cliente ao servidor de recursos no cabeçalho de autorização de solicitações HTTP a fim de acessar recursos protegidos.
3. Tokens da web JSON (JWT)
JWTs são um tipo de token de acesso autônomo que utiliza estruturas de dados baseadas em JSON (JavaScript Object Notation) para codificar informações sobre a sessão de autenticação e os escopos autorizados. Eles permitem que os servidores de recursos verifiquem sua autenticidade e integridade sem a necessidade de se comunicar com o servidor de autorização. JWTs são frequentemente usados no OpenID Connect para tokens de identidade e de acesso.
4. Tokens de acesso OAuth
Os tokens OAuth são usados no protocolo de autenticação OAuth. Eles permitem que um aplicativo acesse partes específicas dos dados de um usuário sem ser necessária a sua senha. Esses tokens têm a flexibilidade de serem emitidos para vários escopos e durações.
5. Tokens de referência
Ao contrário dos JWTs ou tokens de portador, os tokens de referência não são autônomos. Eles são referências a dados de token armazenados no servidor de autorização. Quando um cliente apresenta um token de referência a um servidor de recursos, este deve fazer uma solicitação à parte ao servidor de autorização a fim de validar o token e recuperar os dados do token associado.
Embora ofereçam segurança e controle adicionais, os tokens de referência exigem mais interação entre o servidor de recursos e o servidor de autorização.
6. Tokens de atualização
Tokens de atualização são usados em conjunto com tokens de acesso OAuth. Um cliente pode apresentar aos usuários um token de atualização quando os outros expirarem, sem exigir uma nova autenticação. Os tokens de atualização são usados quando os usuários precisam de acesso contínuo aos recursos por longos períodos.
Conteúdo do token de acesso
Tokens de acesso contêm as informações necessárias para que o servidor de recursos valide e autorize o acesso a recursos protegidos. O conteúdo exato de um token de acesso varia de acordo com o protocolo de autenticação (por exemplo, OAuth 2.0, OpenID Connect) e a implementação, mas geralmente apresenta as seguintes informações:
Como funcionam os tokens de acesso
Tokens de acesso funcionam associando as credenciais de um usuário às suas ações durante a interação com um sistema. Quando um usuário efetua login em um sistema, um token de acesso é emitido, com a inclusão de detalhes relativos à sua identidade e permissões, sendo anexado a todas as ações do usuário no sistema. Isso permite que o sistema verifique se o usuário é quem afirma ser e se possui permissão para executar as ações que está tentando realizar.
Visão geral do ciclo do token de acesso
Solicitação de autorização O cliente redireciona o usuário para um servidor de autorização, juntamente com o ID do cliente, o escopo solicitado e um URI de redirecionamento.
Autenticação O usuário ou aplicativo cliente se autentica no servidor de autorização ou provedor de identidade.
Autorização O servidor de autorização valida as credenciais do usuário e concede acesso aos recursos solicitados.
Emissão do token de acesso Um token de acesso é emitido pelo servidor de autorização ao usuário ou aplicativo cliente autenticado, com informações sobre o usuário, permissões e outros metadados necessários ao acesso a recursos protegidos.
Apresentação do token de acesso O token de acesso para o servidor de recursos.
Validação do token de acesso O servidor de recursos valida o token de acesso para garantir sua autenticidade, integridade e validade.
Acesso a recursos O servidor de recursos concede acesso aos recursos protegidos.
Expiração e renovação do token de acesso Quando um token de acesso expira, a sessão é encerrada ou o aplicativo cliente obtém um novo token de acesso (por exemplo, um token de atualização) para continuar acessando os recursos protegidos.
Revogação de tokens de acesso
Um poderoso recurso de segurança dos tokens de acesso é a capacidade de revogá-los antes da data de expiração. São cenários em que um token de acesso precisaria ser revogado: comprometimento de um token, logout de usuário ou alteração de permissões ou funções de usuários.
Os tokens podem ser revogados de várias maneiras. O OAuth 2.0 especifica um endpoint de revogação que permite aos clientes notificar o servidor de autorização e invalidar um token. Alguns sistemas usam listas negras de tokens, onde os tokens revogados são adicionados a uma lista negra que é verificada a cada solicitação.
Com frequência, os usuários podem revogar seus próprios tokens, especialmente em aplicativos que fornecem uma maneira de visualizar e gerenciar sessões ativas. Por exemplo, muitos serviços web permitem que usuários efetuem logout de todos os dispositivos, o que revoga todos os tokens ativos. Em ambientes que usam gateways de API, o gateway pode impor a revogação do token por meio de verificação com o serviço de autenticação ou usando uma lista de revogação para garantir que o token ainda seja válido.
Independente de como é realizada a revogação do token de acesso, o acesso aos recursos é imediatamente interrompido. Alguns sistemas mantém uma lista centralizada de tokens revogados, que é verificada a cada solicitação. Essa lista é usada para descobrir se um token de acesso foi revogado e se deve ter o acesso negado.
Segurança do token de acesso
Os tokens de acesso devem ser protegidos de modo adequado para garantir a confidencialidade, a integridade e a autenticidade dos processos de autenticação e autorização que os apoiam. As medidas de segurança a seguir são, em geral, as mais usadas para proteger tokens de acesso:
Vincular tokens de acesso a dispositivos clientes ou sessões de usuário específicos.
Combinar tokens de acesso com fatores de autenticação adicionais, como senhas, biometria ou tokens de hardware.
Configurar tokens de acesso com vida útil curta e use tokens de atualização para uso prolongado.
Criptografar tokens de acesso.
Estabelecer mecanismos para a revogação de tokens de acesso.
Implementar mecanismos de registro, monitoramento e auditoria.
Limitar o escopo dos tokens de acesso, concedendo apenas as permissões necessárias à conclusão da tarefa necessária.
Armazenar tokens de acesso com segurança.
Transmitir tokens de acesso por canais seguros (por exemplo, HTTPS).
Validar os tokens verificando sua assinatura, emissor do certificado, público-alvo e data de expiração.
Exemplos de uso dos tokens de acesso
A seguir, alguns exemplos mais comuns de como os tokens de acesso são utilizados.
Acesso à API
Em geral, os tokens de acesso são usados para autenticar solicitações ao interagir com APIs RESTful. Um exemplo é quando um aplicativo móvel precisa buscar dados do usuário em um serviço de back-end. O aplicativo inclui um token de acesso nos cabeçalhos da solicitação para comprovar que a solicitação é de um usuário autenticado.
Permitir que aplicativos solicitem tokens de um servidor de autorização e os utilizem para acessar APIs.
Restringir o acesso a determinadas funcionalidades da API apenas para aplicativos, serviços ou usuários autorizados.
Proteger endpoints de API.
Serviços de nuvem
Em ambientes de nuvem (por exemplo, AWS, Azure e GCP), tokens de acesso podem ser usados para conceder credenciais temporárias a serviços ou aplicativos. Por exemplo, na AWS, uma instância EC2 pode usar um token de acesso que lhe permite interagir com buckets S3.
Controlar o acesso a recursos, como bancos de dados, contêineres de armazenamento e máquinas virtuais.
Auxiliar plataformas de nuvem a gerenciar o acesso a seus serviços.
Limitar a interação e o acesso a recursos confidenciais da nuvem a entidades autenticadas e autorizadas.
Chamadas de API seguras
Um exemplo de como as chamadas de API seguras são usadas é com aplicativos móveis. Esses aplicativos geralmente usam tokens de acesso para se comunicar com segurança com serviços de back-end, garantindo que apenas usuários autenticados possam executar ações, como recuperar ou atualizar seus dados.
Gerenciamento de sessão
JWTs (JSON Web Tokens) podem ser usados para gerenciar sessões em aplicativos web. Após o login, o usuário recebe um JWT, que é armazenado no lado do cliente (por exemplo, em um armazenamento local ou em um cookie) e é enviado com cada solicitação para verificar a identidade do usuário.
Logon único (SSO)
Em ambientes corporativos, os sistemas de SSO podem emitir tokens de acesso a fim de permitir que usuários façam login uma vez e acessem vários aplicativos, sem a necessidade de uma autenticação separada para cada aplicativo.
Ajudar a manter a sessão autenticada de um usuário em diferentes aplicativos.
Fornecer acesso contínuo a diversos aplicativos ou serviços com um único conjunto de credenciais.
Reduzir a necessidade de logins recorrentes.
Acesso a serviços de terceiros
Contas de redes sociais e outras contas (por exemplo, Google ou Facebook) podem ser usadas para fazer login em um aplicativo de terceiros. Nesse caso, o aplicativo recebe um token de acesso que lhe permite interagir com esses serviços em nome do usuário, sem exigir que ele insira suas credenciais.
Autenticação de transações
Os gateways de pagamento geralmente usam tokens de acesso para autenticar solicitações de API relacionadas ao processamento de pagamentos, garantindo a execução apenas de transações autorizadas.
Sistemas de identidade federada
Permitir que usuários acessem recursos em diferentes domínios de segurança ou organizações.
Ajudar a mapear a identidade e as permissões de um usuário em diversos sistemas.
Simplificar o gerenciamento de acesso em colaboração entre várias organizações.
Internet das Coisas (IoT)
Manter a integridade e a privacidade das comunicações de IoT.
Restringir o acesso e os recursos de transmissão de dados a dispositivos autorizados.
Proteger a comunicação entre dispositivos de IoT e a nuvem ou outros dispositivos.
Aplicativos móveis
Autenticar e autorizar usuários sem armazenar suas credenciais.
Autenticação Web (por exemplo, OAuth2 e OpenID Connect)
Usar em conjunto com os protocolos OAuth2 e OpenID Connect para autenticação e autorização de usuários.
A forma segue a função ao selecionar os tipos de token de acesso
O uso de tokens de acesso proporciona uma autenticação de baixo atrito. Os tokens de acesso são um mecanismo de segurança comprovado para autorização e delegação de recursos em ambientes distribuídos. Reserve um tempo para avaliar os casos de uso e os requisitos ao tomar decisões sobre qual tipo de token de acesso usar.