JWT - BEARER TOKEN
Published: 2024-01-09 19:54:22


O **JSON Web Token** (JWT) é uma maneira segura de transmitir informações entre partes. Ele é frequentemente usado para autenticação em sistemas web e troca de informações entre serviços. Vamos simplificar:

Imagine que você tem uma "caixa" (token) que contém informações importantes. Essa caixa é assinada digitalmente para garantir que ninguém mexeu com ela. Dentro dessa caixa, você coloca algumas informações, como quem é o usuário e por quanto tempo o token é válido.

Quando você precisa compartilhar essas informações com outro serviço, você entrega a "caixa" (token). O serviço receptor pode verificar a assinatura para garantir que o conteúdo não foi alterado e, assim, confiar nas informações dentro do token.

Portanto, JWT é como uma caixa segura que você pode enviar para outros serviços, e eles podem confiar nas informações nela devido à assinatura digital. Isso é muito útil para autenticação e autorização em aplicações web.

**Configurações**
Instalar o pacote Microsoft.AspNetCore.Authentication.JwtBearer
Chave secreta = para gerar o token é necessário informar uma chave secreta, que deve ter no minimo 128 bits, por segura é importante remove-la do código, mas em período de teste é possível adiciona-lá no appSettings ou em uma classe apoio, conforme o exemplo abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5h6o28tekbcwbrebfdc.png)


**Estrutura do JWT**

Handler - Cria uma instancia do JWT - Principal responsável pela geração do token (através dele o token será gerado)
Inicialização:
var handler = new JwtSecurityTokenHandler()

CreateToken - Método responsável pela criação do token, a partir dos parametros informados no tokenDescriptor.
var token = handler.CreateToken(tokenDescriptor);

WriteToken - Conversão do token para string.
var strToken = handler.WriteToken(token);

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uif7xfkr6cahwrgky2eo.png)

-- Configurando as credencias
SigningCredentials - Responsável pelas credenciais que serão utilizadas na criação do token - Objeto utilizado para realizar a assinatura do token
var key = Encoding.ASCII.GetBytes(Configuration.PrivateKey);
var credentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature);

TokenDescriptor - Conteúdo que ficará dentro do token e será criptografado.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/upt6640n6csnlt30rntx.png)
~~Aproximado

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8vr653lc47sk8ql79r49.png)

É possivel configurar o tempo de expiração do token, para aumentar a segurança, conforme mostra abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rqr74qyo2j61cirgiol9.png)


Projetos criados que utilizam o token JWT:
https://github.com/RafaelaNasciment/carrinho-compras 
https://github.com/RafaelaNasciment/JwtBearer

Conteúdos utilizados para desenvolvimento desse artigo: 
https://www.youtube.com/watch?v=-eGSRK7z8-w
https://www.youtube.com/watch?v=anjAu3RY7o8

#jwt #csharp #development #auth #authorization