Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Erro na chave

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

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

namespace UsuariosApi.Services
{
    public class TokenServices
    {
        public string GenerateToken(Usuario usuario)
        {
            Claim[] claims = new Claim[]
            {
                new Claim("username", usuario.UserName),
                new Claim("id", usuario.Id),
                new Claim(ClaimTypes.DateOfBirth, usuario.DataNascimento.ToString()),
                new Claim("loginTimestamp", DateTime.UtcNow.ToString())
            };

            var chave = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("9ASHDA98H9ah9ha9H9A89n0f"));

            var signingCredenials = new SigningCredentials(chave, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken
                (
                expires: DateTime.Now.AddMinutes(10),
                claims: claims,
                signingCredentials: signingCredenials
                );

            return new JwtSecurityTokenHandler().WriteToken(token);
        }
    }
}
2 respostas
solução!

Olá, Wagner!

Pelo código que você compartilhou, parece que você está tendo um erro na chave utilizada para gerar o token JWT. O erro pode estar relacionado ao tamanho ou formato da chave.

Uma possível solução para esse problema é verificar se a chave está correta e se está sendo fornecida no formato esperado pelo método SymmetricSecurityKey. Certifique-se de que a chave esteja em UTF-8 e que tenha o tamanho adequado para o algoritmo de criptografia utilizado.

Aqui está um exemplo de como você pode gerar uma chave aleatória de 32 bytes usando a classe RandomNumberGenerator:

var chave = new byte[32];
using (var rng = RandomNumberGenerator.Create())
{
    rng.GetBytes(chave);
}

var chaveBase64 = Convert.ToBase64String(chave);

Em seguida, você pode utilizar essa chave gerada para criar a instância de SymmetricSecurityKey:

var chave = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(chaveBase64));

Espero que isso ajude a resolver o seu problema! Se tiver mais alguma dúvida, é só perguntar.

Espero ter ajudado e bons estudos!

Usando essa chave funciona também, e consigo usala novamente mais a frente no curso no program

var chave = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("65DA65DAS54D654DAS6D4A6S54D8A4D852AS4D85"));