Autenticação baseada em token versus cookie

Arquitetura para autenticação de aplicativos e APIs

Atualmente um dos grandes desafios ao projetar uma arquitetura para web vem da diversidade de dispositivos e plataformas que estão presentes no nosso dia-a-dia. Para aqueles que trabalham com desenvolvimento web, projetos mobile ou mesmo desenvolvendo integração com alguma API dos grandes players do mercado, os desafios de se implementar uma autenticação não é nenhuma novidade.

Basicamente, existem dois métodos para implementar autenticação em aplicações ou APIs: com CookieToken.

Autenticação baseada em Cookie

É a estratégia mais utilizada, haja vista que é a forma mais tradicional. Utiliza cookies para autenticar o usuário a cada request. É por isso que uma autenticação baseada em cookie é normalmente conhecida como stateful. Ou seja, o estado da requisição anterior é mantido em sessão e pode ser recuperado.

Autenticação baseada em Token

É uma estratégia mais nova, porém amplamente utilizada, uma vez que permite autenticar usuários de diversos dispositivos com a mesma tecnologia. Um token assinado é enviado para o servidor a cada request. É por isso que uma autenticação baseada em token é normalmente conhecida como stateless. Ou seja, toda transação é realizada como se estivesse sendo feita pela primeira vez.

Diagrama explicando o funcionamento dos dois métodos:

arquitetura-token

Benefícios de uma autenticação baseada em token

  • Cross-domain / CORS: Cookies não trabalham bem com CORS (Cross-origin resource sharing). Uma estratégia baseada em token permite fazer chamadas AJAX para qualquer servidor, em qualquer domínio porque você usará o header HTTP para transmitir a informação do usuário.
  • Stateless: Sinônimo de escalabilidade do lado servidor. Não há necessidade de manter sessão em memória, uma vez que o token carrega consigo toda a informação do usuário necessária para fazer uma requisição ao servidor.
  • CDN: Você pode distribuir todos os seus assets através de um CDN, ou seja, todo conteúdo JavaScript, HTML, imagens, etc. Dessa forma seu servidor funcionará apenas como uma API.
  • Desacoplamento: Você não precisa ficar engessado a um esquema de autenticação porque o token pode ser gerado de qualquer lugar, de qualquer aplicação. Pode ser utilizado um STS(Security Token Service) por exemplo.
  • Mobile: Uma autenticação baseada em token já nasce preparada para aplicações mobile. Quando desenvolvendo aplicações mobile nativas (Android, iOS, Windows Mobile, etc.), autenticação baseada em cookie não se torna a melhor opção para consumir APIs seguras. Adotar uma estratégia baseada em token simplifica demais todo o processo de desenvolvimento.
  • CSRF: Uma vez que você não utilizará cookies, você não precisará se proteger contra ataques do tipo CSRF (Cross-site request forgery).
  • Performance: Utilizando as técnicas abordados acima, seu servidor passará a receber muito menos requisições, devido ao uso de CDN, bem como não precisará necessariamente consultar sessões em um banco de dados a cada requisição, passando a apenas validar a fazer parse do conteúdo de um token.

Referências:

http://www.w3.org/2001/sw/Europe/events/foaf-galway/papers/fp/token_based_authentication/

https://auth0.com/blog/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *