using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.IdentityModel.Tokens;
public static void Main()
var userInfo = new UserInfo
Email = "teste@teste.com",
Roles = new[] {"read", "update"}
Console.WriteLine(new JwtTokenGenerator("Minha chave para o fornecedor x da empresa Ai...", new TimeSpan(1,0,0,0)).GenerateToken(userInfo));
public string UserName { get; set; }
public string Email { get; set; }
public string[] Roles { get; set; }
public class JwtTokenGenerator
private readonly string _secretKey;
private readonly TimeSpan _expirationTime;
public JwtTokenGenerator(string secretKey, TimeSpan expirationTime)
_expirationTime = expirationTime;
public string GenerateToken(UserInfo userInfo)
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new List<Claim>
new Claim(JwtRegisteredClaimNames.Sub, userInfo.UserName),
new Claim(JwtRegisteredClaimNames.Email, userInfo.Email)
foreach (var role in userInfo.Roles)
claims.Add(new Claim(ClaimTypes.Role, role));
var token = new JwtSecurityToken(
expires: DateTime.Now.Add(_expirationTime),
signingCredentials: credentials
return new JwtSecurityTokenHandler().WriteToken(token);