Tokens JWT em C# (.NET): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Tokens JWT em C# (.NET): criação, verificação e validação



JSON Web Token (JWT) é um padrão aberto (RFC 7519) para criar tokens de acesso baseados no formato JSON. JWT é amplamente utilizado em aplicações web modernas para autenticação e troca de informações entre cliente e servidor. Neste artigo, abordaremos detalhadamente como trabalhar com tokens JWT no ecossistema C# (.NET), incluindo criação, assinatura, verificação e validação de tokens.



Componentes principais do JWT



O JWT consiste em três partes separadas por pontos:

  • Header — cabeçalho contendo informações sobre o tipo de token e o algoritmo de assinatura
  • Payload — carga útil com dados (claims)
  • Signature — assinatura que garante a integridade do token


Exemplo de token JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c



Instalação dos pacotes necessários



Para trabalhar com JWT em .NET, é necessário instalar o pacote System.IdentityModel.Tokens.Jwt. Isso pode ser feito através do NuGet Package Manager ou usando o .NET CLI:



dotnet add package System.IdentityModel.Tokens.Jwt


Também pode ser necessário instalar o Microsoft.AspNetCore.Authentication.JwtBearer para integração com ASP.NET Core:



dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer


Criação de token JWT em C#



Vamos considerar um exemplo completo de criação de token JWT usando chave simétrica (HMAC SHA256):



using System;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;using Microsoft.IdentityModel.Tokens;

public class JwtService{ private readonly string _secretKey; private readonly string _issuer; private readonly string _audience;

public JwtService(string secretKey, string issuer, string audience) { _secretKey = secretKey; _issuer = issuer; _audience = audience; }

public string GenerateToken(string userId, string userName, string role) { var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var claims = new[] { new Claim(ClaimTypes.NameIdentifier, userId), new Claim(ClaimTypes.Name, userName), new Claim(ClaimTypes.Role, role), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(JwtRegisteredClaimNames.Iat, new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds().ToString()) };

var token = new JwtSecurityToken( issuer: _issuer, audience: _audience, claims: claims, expires: DateTime.UtcNow.AddHours(1), signingCredentials: credentials );

return new JwtSecurityTokenHandler().WriteToken(token); }}


Verificação e validação de token JWT



Para verificar a autenticidade e extrair dados do token, utiliza-se o método ValidateToken:



public ClaimsPrincipal ValidateToken(string token){    var tokenHandler = new JwtSecurityTokenHandler();    var key = Encoding.UTF8.GetBytes(_secretKey);

try { var principal = tokenHandler.ValidateToken(token, new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = true, ValidIssuer = _issuer, ValidateAudience = true, ValidAudience = _audience, ValidateLifetime = true, ClockSkew = TimeSpan.Zero\

Recommendations