使用 JWT 令牌不断从邮递员处获取 401

问题描述 投票:0回答:1

我已经使用 .NetCore 6 创建了一个 API 项目。我已经按照教程进行操作,我认为我没有错过任何内容。 我运行该程序,直到我实现只有授权用户才能访问它,它才能正常工作。

所以我实现了 JWT 身份验证。 我已在 https://jwt.io/ 中验证了令牌,并获得了已验证的签名。 但是,当我尝试通过 POSTMAN 调用具有 [Authorize] keywork 的方法时,我收到 401 Unauthorized 作为响应。 有人可以帮我解决这个问题吗? 下面是实现中的相关代码。

    *********** API ENDPOINT ***********
    [Authorize]
    [HttpGet]
    public async Task<ActionResult<IEnumerable<User>>> GetUsers()
    {
      if (_context.Users == null)
      {
          return NotFound();
      }
        return await _context.Users.ToListAsync();
    }

    *********** Program.cs ***********
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
    {
        options.RequireHttpsMetadata = false;
        options.SaveToken = true;    
        options.TokenValidationParameters = new TokenValidationParameters()
        {
            ValidateIssuer = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidateAudience = true,
            ValidAudience = builder.Configuration["Jwt:Audience"],
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(
                builder.Configuration["Jwt:Key"]))
        };
    });

    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    var app = builder.Build();

    // Configure the HTTP request pipeline.
    if (app.Environment.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI();
    }

    app.UseCors();

    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseAuthentication();

    app.UseAuthorization();

    app.MapControllers();

    app.Run();

    *********** GENERATES THE TOKEN ***********
    private string GetToken()
    {
        var claims = new[]
        {
            new Claim(JwtRegisteredClaimNames.Sub, _configuration["Jwt:Subject"]),                
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
            new Claim(JwtRegisteredClaimNames.Iat, "1516239022"),
            new Claim("userId" , "1"),
            new Claim("name", "Jason"),
            new Claim("userName", "Jason"),
            new Claim("email", "[email protected]")
        };

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("lectureTest12345"));
        var singIn = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
        var token = new JwtSecurityToken(
                _configuration["Jwt: Issuer"],
                _configuration["Jwt:Audience"],
                claims,
                expires: DateTime.UtcNow.AddHours(1),
                signingCredentials: singIn
                );

        return new JwtSecurityTokenHandler().WriteToken(token);

    }
asp.net-core http-status-code-401
1个回答
0
投票

但是当我尝试通过以下方式调用具有 [Authorize] keywork 的方法时 邮递员,我收到 401 未经授权的回复。

我已经回答了你上一篇帖子的问题,看看这个答案 .

© www.soinside.com 2019 - 2024. All rights reserved.