Carregando...
Sem categoria

Autenticação usando JSON Web Token (JWT)

O JWT é uma ferramenta que faz parte do sistema de autenticação em um software web.

O JWT é nada mais que um arquivo de texto que o usuário de um website (que utiliza autenticação) guarda dentro do navegador de seu computador para que não precise digitar senha e login toda vez que tiver que fazer uma ação no sistema (criar/apagar/ver qualquer dado dentro do sistema).

Ou seja, sem a tecnologia do JWT o usuário teria que informar seu login e senha a cada ação que deseja realizar no sistema.

Mas o JWT por si só não faz a autenticação! É preciso de mais 2 ferramentas para a autenticação ficar completa.

  1. Precisamos de um banco de dados (ou algo do tipo) que guarde logins e senhas dos usuários.
  2. Precisamos de uma biblioteca geradora de JWTs no servidor

E como tudo isso funciona junto?

1 – Cliente envia login e senha

Um usuário entra num website e envia seu login e senha para o servidor do website via HTTPS (enviar o login e senha via POST no corpo da mensagem para que eles não sejam impressos nos logs).

2 – Servidor confere login e senha

O servidor recebe a mensagem e verifica no banco de dados (ou em outro lugar) se o login existe e se a senha está correta.

3 – Servidor cria um JWT decodificado

Se o login e a senha estiverem corretos, o servidor cria um pequeno arquivo texto contendo o seguinte:

//HEADER:
{
  "alg": "HS256",
  "typ": "JWT"
}
//PAYLOAD:
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Esse arquivo é o arquivo JWT decodificado.

No HEADER temos:
“alg”, o tipo do algoritmo de criptografia a ser usado
“typ”, o tipo do token a ser utilizado, JWT

No PAYLOAD temos:
sub (subject) = Entidade à quem o token pertence, normalmente o ID/Login do usuário;
iss (issuer) = Emissor do token;
exp (expiration) = Timestamp epoch de quando o token irá expirar;
iat (issued at) = Timestamp epoch de quando o token foi criado;
aud (audience) = Destinatário do token, representa a aplicação que irá usá-lo.
E qualquer outro dado que queria colocar aqui…

4 – Servidor codifica o JWT decodificado

Nessa etapa é preciso usar uma biblioteca geradora de JWT para a linguagem de programação usada no servidor.

Essa biblioteca pegará o JWT decodificado e assinará/codificará ele com uma chave secreta (que pode ser única para sempre, desde que não seja vazada).

O JWT decodificado é algo tipo isso:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGVhdGl0dXNAYWxlYXRpdHVzLm1lIiwibmFtZSI6IkFsZWF0aXR1cyIsImlhdCI6MTUxNjIzOTAyMn0.esUoBdXjSOhC1VH6F4gtrmYKwrgbID7ima70x5aE8Pk

5 – Servidor envia o JWT codificado para o Cliente

O Servidor envia o JWT codificado para o cliente. O cliente pode guardá-lo em um cookie com a mesma data de expiração. O cliente enviará esse JWT codificado ao servidor todas vezes que quiser se comunicar pelo cabeçalho (header) HTTPS.

Referências

Entendendo JWT
https://medium.com/tableless/entendendo-tokens-jwt-json-web-token-413c6d1397f6

JWT.io
https://jwt.io/

Gerando e Lendo JWT no PHP
https://imasters.com.br/back-end/entendendo-o-jwt

Boas práticas de segurança com JWT
https://blog.logrocket.com/jwt-authentication-best-practices/

Qual a diferença entre JWT e Cookies?
https://stackoverflow.com/questions/37582444/jwt-vs-cookies-for-token-based-authentication

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *