Token, para que te quero?
Um token é uma string de dados que representa um direito ou permissão de acesso, em sistemas de software.
É frequentemente usado na autenticação e autorização de sistemas, de APIs, e de plataformas web. Quando um utilizador ou serviço se autentica com sucesso, o sistema emite um token que pode ser utilizado para aceder a recursos específicos, sem existir a necessidade de repetição da autenticação frequente e constante.
Os tokens são vastamente utilizados em sistemas distribuídos e baseados na web, como substitutos de credenciais, como passwords/senhas. A utilização de tokens torna o acesso mais seguro e eficiente, pois estes podem ser temporários, com duração limitada e restrições específicas. Depende dos objectivos e utilização.
Tipos de Tokens
Os principais tipos de tokens incluem:
Bearer Tokens: maioritariamente utilizados em APIs RESTful. O cliente recebe um token quando o seu user é criado no sistema, que deve ser depois enviado em cada Request para autenticação. Este token pode ser fixo ou gerado a cada utilização.
JWT (JSON Web Token): Este é outro tipo de token muito popular para autenticação de APIs. É compacto, auto-contido e contém informação sobre o utilizador, como claims (informações codificadas), assinaturas digitais e duração do token.
OAuth Tokens: Utilizado em sistemas OAuth para autorização, por norma há dois tipos:
Access Tokens: Utilizados para aceder a recursos protegidos.
Refresh Tokens: Utilizados para obter novos access tokens sem a necessidade de re-autenticação.
ID Tokens: Faz parte do protocolo OpenID Connect e este token contém informações de identidade do utilizador autenticado.
Como e Quando pode um QA Usar Tokens?
Um QA pode utilizar tokens aquando dos testes a sistemas que requerem autenticação e autorização. A utilização de tokens é essencial nos testes de segurança, nos testes de validação de acesso a APIs, e também para simular diferentes cenários de permissão.
Alguns cenários típicos:
API: Ao testar APIs que requerem autenticação, um QA deve usar tokens para aceder a endpoints protegidos, o que inclui testar a validade dos tokens, verificar o comportamento dos tokens expirados ou inválidos, e também validar se os diferentes níveis de acesso são devidamente respeitados.
Segurança: Um QA pode usar tokens para testar várias vulnerabilidades, como a tentativa de reutilização de tokens expirados (replay attacks) ou então verificar se os tokens são devidamente protegidos (por exemplo, são armazenados de forma segura no frontend), entre outros.
Fluxos de Autenticação: Em sistemas que implementam OAuth ou OpenID Connect, o QA deve testar o ciclo completo de geração, utilização, e expiração dos tokens.
Ferramentas Mais Frequentes que Pedem Tokens
São diversas as ferramentas que recorrem ao uso de tokens para testar APIs e/ou autenticar em sistemas.
Algumas das mais comuns são:
Postman: utilizado para testes de APIs, permite a inserção e gestão de tokens em Requests.
SoapUI: usado para testar APIs SOAP e REST, oferece suporte para autenticação via tokens.
JMeter, ferramenta de teste de carga, que pode ser configurada para enviar tokens em Requests.
Cypress, que pode ser configurado para utilizar tokens JWT para autenticação em testes end-to-end.
Insomnia, é outra ferramenta popular para testes de APIs, com suporte para autenticação baseada em tokens.
Principais Benefícios de Usar Tokens
Segurança Reforçada
Os tokens permitem que que dados de acesso/credenciais sensíveis, como senhas, não sejam transmitidos de forma repetida. Para além disso, podem ser configurados com duração limitada e restrições específicas.
Escalabilidade
Em sistemas distribuídos, a utilização de tokens facilita a comunicação segura entre microserviços, sem a necessidade de autenticações contínuas.
Flexibilidade
Os tokens podem ser usados em diversos dispositivos e contextos, facilitando assim a interoperabilidade entre diferentes plataformas e aplicações.
Principais Dificuldades de Usar e Testar Tokens
Gestão de Validade
Testar fluxos de validade e renovação de tokens (como refresh tokens) pode ser complicado, principalmente em ambientes com múltiplos pontos de falha.
Segurança dos Tokens
Garantir que os tokens estão adequadamente protegidos é um desafio importante, pois tokens expostos podem ser utilizados para ataques de replay ou session hijacking.
Integração Complexa
Testar sistemas com autenticação distribuída pode ser complexo, principalmente quando diferentes sistemas precisam partilhar entre si tokens e informações, como a identidade do utilizador.
Principais Fornecedores de Soluções de Tokens
Auth0: Plataforma que fornece autenticação e autorização como serviço.
Okta: Serviço que oferece soluções de identidade e segurança, incluindo autenticação baseada em tokens.
AWS Cognito: Serviço da Amazon que oferece autenticação e gestão de utilizadores.
Google Identity Platform: Oferece serviços de autenticação e autorização, suportando tokens OAuth e OpenID Connect.
Portanto, os tokens são cruciais para os sistemas modernos de autenticação e autorização, e a sua correta utilização (e respectivos testes) são fundamentais para garantir a segurança e funcionalidade de aplicações.
Como Aprender Mais sobre Tokens?
Para aprender mais sobre tokens…
Estudar Autenticação e Autorização em APIs
Entender como funcionam os protocolos de autenticação, como OAuth2, OpenID Connect, e JWT. Existem já muitos tutoriais na net, bem como a documentação oficial para essas tecnologias.
Documentação do OAuth2 e OpenID Connect
São boas fontes de informação para entender como os tokens funcionam em cenários de autenticação moderna.
JWT.io
Oferece-nos uma explicação interativa de como os tokens JWT funcionam e permite-nos explorar as diferentes partes do token.
Praticar com ferramentas, como Postman ou Insomnia, configurando Pedidos/Requests de APIs que requeiram autenticação baseada em tokens e explora diferentes cenários, como o tempo de vida dos tokens, a manipulação de tokens inválidos, etc.
Cursos e Tutoriais existem em plataformas de cursos como Udemy, Coursera, e Pluralsight, e existem muitos conteúdos sobre segurança de APIs, onde a utilização de tokens é abordada em detalhes.