2
respostas

[Dúvida] Dúvida sobre o TOKEN

Olá Prof.... A dúvida é o seguinte: Já é sabido, que a API não gera a sessão, por esse motivo o atacante não consegue as credencias do usuário para efetuar os devidos ataques!!!! Mas o que há no token, em que o atacante não consegue pegar as credencias do usuário?? O que impede do atacante pegar o token e utilizar como se o fosse o usuário, para ter o acesso a API????

2 respostas

Olá, Junioinf!

Entendo sua dúvida sobre a segurança dos tokens e como eles protegem as credenciais dos usuários. Vamos lá!

Os tokens, especialmente os JWT (JSON Web Tokens), são projetados para serem seguros e evitar que um atacante possa facilmente obter as credenciais do usuário. Aqui estão alguns pontos importantes sobre isso:

  1. Codificação e Assinatura: Um JWT é composto por três partes: o header, o payload e a assinatura. O payload contém as informações do usuário (claims), mas essas informações são codificadas em Base64, não criptografadas. A segurança real vem da assinatura. A assinatura é criada usando um algoritmo de hashing (como HMAC SHA256) e uma chave secreta conhecida apenas pelo servidor. Isso garante que, se o token for alterado de qualquer forma, a assinatura não corresponderá e o token será considerado inválido.

  2. Validade Temporal: Tokens JWT geralmente têm um tempo de expiração definido. Isso significa que mesmo que um atacante consiga obter um token, ele só será válido por um período limitado. Após a expiração, o token não pode mais ser usado para autenticação.

  3. Transmissão Segura: É crucial que os tokens sejam transmitidos de forma segura, geralmente através de HTTPS. Isso evita que um atacante possa interceptar o token durante a transmissão.

  4. Armazenamento Seguro: No lado do cliente, o token deve ser armazenado de forma segura. Em aplicações web, isso pode ser feito usando cookies seguros e HttpOnly ou localStorage, dependendo do caso de uso. Em aplicações móveis, existem técnicas específicas para armazenar tokens de forma segura.

Para ilustrar, vamos ver um exemplo prático de como um JWT é estruturado e assinado:

Header:
{
  "alg": "HS256",
  "typ": "JWT"
}

Payload:
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Signature:
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

Neste exemplo, mesmo que alguém consiga ver o payload (que contém informações como o nome do usuário), eles não poderão modificar o token sem invalidar a assinatura, a menos que conheçam a chave secreta usada para gerar a assinatura.

Espero ter ajudado e bons estudos!

Valeu Prof... Explicação Show....