O que é autenticação baseada em tokens?

A autenticação baseada em token é uma maneira de confirmar a identidade de um usuário ou dispositivo. Ela se baseia em verificar se a entidade em questão possui um token emitido anteriormente.

Objetivos de aprendizado

Após ler este artigo, você será capaz de:

  • Definir a autenticação baseada em tokens
  • Descrever os dois tipos de autenticações baseadas em tokens
  • Comparar autenticação por token com autenticação baseada em cookies para aplicativos web

Copiar o link do artigo

O que é autenticação baseada em tokens?

A autenticação baseada em tokens é o processo de verificação de identidade verificando um token. No gerenciamento de acesso, os servidores usam autenticação por token para verificar a identidade de um usuário, uma API, um computador ou outro servidor.

Um token é um item simbólico emitido por uma fonte confiável — pense em como os agentes da lei carregam um crachá emitido por sua agência que legitima sua autoridade. Os tokens podem ser físicos (como uma chave USB) ou digitais (uma mensagem gerada por computador ou assinatura digital).

A autenticação baseada em token pode se referir a alguns processos diferentes:

  1. Verificar a identidade por meio de um token físico. Este é um fator de autenticação amplamente usado para fazer login: a apresentação do token do usuário é solicitada ao fazer login em uma conta ou dispositivo . (Os fatores de autenticação são descritos com mais detalhes em O que é autenticação?)
  2. Reconfirmar a identidade por meio de um token da web. Os tokens da web são puramente digitais. Um token da web é gerado por um servidor e enviado para um cliente. O token é anexado a cada solicitação do cliente para que o servidor conheça a identidade do cliente e saiba quais dados o cliente pode acessar. Esse tipo de autenticação baseada em token contrasta com a autenticação baseada em cookie, que é uma maneira semelhante de realizar a mesma coisa — saiba mais abaixo.

Como funciona a autenticação com um token físico?

A autenticação via token físico geralmente ocorre durante o processo de login do usuário. O usuário tem que provar que possui um item que ninguém mais possui. Ele pode provar isso inserindo um código exibido pelo item, conectando o item a um dispositivo via USB, conectando o item via Bluetooth ou vários outros métodos. Semelhante à maneira como inserir uma senha prova que o usuário possui um conhecimento que ninguém mais possui, usar um token prova que um usuário possui um item que apenas ele possui.

Existem dois tipos de tokens usados para esse tipo de autenticação:

  • Tokens de software e tokens de hardware. Os tokens de software envolvem a inserção de um código secreto ou mensagem enviada a um dispositivo para provar a posse do dispositivo. Muitas vezes, isso assume a forma de um código enviado a um smartphone por mensagem de texto.
  • Tokens de hardware são itens de hardware que o usuário conecta diretamente a um computador ou dispositivo móvel para fazer o login.

Como funciona a autenticação via token da web?

Um token da web é um item digital, não físico. É uma mensagem enviada de um servidor para um cliente e armazenada temporariamente pelo cliente. O cliente inclui uma cópia do token em solicitações subsequentes enviadas ao servidor para confirmar o status de autenticação do cliente.

Enquanto a autenticação por token físico verifica a identidade durante o processo de login, os tokens da web são emitidos como resultado de um login bem-sucedido. Eles mantêm a sessão de login ativa.

No entanto, usar tokens da web para sessões de usuário nem sempre é o ideal. Muitos desenvolvedores são defensores do uso de cookies. Os tokens da web podem ser melhor usados para autenticação de endpoints de APIs ou para validar uma conexão entre servidores, em vez de entre servidor e cliente.

O que é o JSON Web Token (JWT)?

No desenvolvimento da web, "tokens da web" quase sempre se referem a JSON Web Token. JSON Web Token (JWT) é um padrão para criar tokens da web assinados digitalmente que contêm dados JavaScript Object Notation (JSON). Um servidor cria um token que comprova a identidade do cliente e o envia ao cliente. O JWT usa assinaturas digitais para provar que o token é legítimo.

Os JWTs incluem três componentes:

  • Cabeçalho: o cabeçalho fornece informações sobre o JWT — que tipo de token o JWT é e qual método foi usado para assiná-lo digitalmente.
  • Carga: qualquer dado do JSON pode ficar aqui. As cargas de JWT para autenticação incluem declarações sobre a identidade do usuário na carga. Elas também podem incluir informações sobre as permissões do usuário, do servidor ou do endpoint da API.
  • Assinatura digital: a assinatura usa criptografia para assinar o cabeçalho e a carga com uma chave para garantir que os dados contidos sejam legítimos. Pense na assinatura digital como um selo inviolável em um frasco de remédio.

Autenticação baseada em token (JWT) versus autenticação baseada em cookie

Às vezes, os JWTs são usados para manter os usuários autenticados depois que eles fazem login em um aplicativo web. No entanto, os cookies também podem ser usados para esse fim.

Um cookie é um pequeno arquivo de dados que um servidor envia a um cliente. Quando um usuário entra em um aplicativo web, o servidor gera um cookie e o envia para o dispositivo cliente (normalmente o computador ou smartphone do usuário). O dispositivo cliente armazena o cookie no cache do navegador e inclui uma cópia do cookie em solicitações futuras ao servidor, semelhante à forma como os JWTs podem ser usados. Depois que o usuário sai, o navegador exclui o cookie.

Os cookies têm um tamanho de arquivo muito menor em comparação com os JWTs, porque os JWTs incluem cabeçalhos e assinaturas digitais além da carga. Por outro lado, o cookie contém apenas a carga. Isso os torna muito mais eficientes em termos de performance na web e largura de banda.

  • Performance na web: um cookie é carregado mais rapidamente porque contém menos informações — pense em como uma foto é baixada mais rapidamente do que um vídeo.
  • Largura de banda: como os cookies são menores, eles reduzem a quantidade total de dados que precisam passar pelas redes entre o cliente e o servidor. Isso pode resultar em economia de custos em comparação com JWTs para o operador do aplicativo web.

Os JWTs não são otimizados para performance porque incluem assinaturas digitais, que garantem que seu conteúdo não seja adulterado. Mas se um aplicativo web estiver usando HTTPS (como deveria), um cookie deve ser à prova de adulteração de qualquer maneira. O HTTPS criptografará e assinará o cookie junto com todos os outros dados do HTTP que estão sendo trocados entre cliente e servidor e os invasores não poderão forjá-lo ou interceptá-lo em trânsito, a menos que estejam realizando um ataque on-path.

Os JWTs são mais adequados para APIs e conexões de servidor para servidor. Esses usos não precisam escalar muito: um aplicativo web pode obter um milhão de usuários, mas não terá um milhão de conexões de API. Isso reduz o impacto potencial na performance e na largura de banda. No entanto, outros métodos de autenticação, como TLS mútuo, às vezes são mais eficientes para APIs —saiba mais sobre TLS mútuo.