C# Authorization JWT token

Viewed 31

I have an issue with Postman. When generating token truth swagger I get JWT. When checking the token in jwt.io it can read the token jwti.io success

But when adding it in postman it shows error 401. postman 401

Does anyone know what the issue could be?

public class TokenHandler : ITokenHandler
{
    private readonly IConfiguration _configuration;
    public TokenHandler(IConfiguration configuration)
    {
        this._configuration = configuration;
    }
    public Task<string> CreateTokenAsync(User user)
    {
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));


        // create Claims
        var claims = new List<Claim>();

        claims.Add(new Claim(ClaimTypes.GivenName, user.FirstName));
        claims.Add(new Claim(ClaimTypes.Surname, user.LastName));
        claims.Add(new Claim(ClaimTypes.Email, user.EmailAddress));


        //loop into roles of users
        user.Roles.ForEach((role) =>
        {
            claims.Add(new Claim(ClaimTypes.Role, role));
        });

        var credentials = new SigningCredentials(key,SecurityAlgorithms.HmacSha256);
        var token = new JwtSecurityToken(
            _configuration["Jwt:Issuer"],
            _configuration["Jwt:Audience"],
            claims,
            expires: DateTime.Now.AddMinutes(15),
            signingCredentials: credentials);

        return Task.FromResult(new JwtSecurityTokenHandler().WriteToken(token));
    }
1 Answers

The mistake was in Program.cs

//injected token validations by me
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options => options.TokenValidationParameters =
    new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = builder.Configuration["Jwt:Issuer"],
        ValidAudience = builder.Configuration["Jwt:Audience"],
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes
        (builder.Configuration["Jwt:Key"]))
    });

On the last line builder.Configuration["Jwt:Key"], i had added before builder.Configuration["Jwt:Audience"]. Changing it to Key fixed it

Related