首页 > 解决方案 > 使用 JWT 添加 [Authorize] 时无法访问页面

问题描述

一个多星期后,我尝试在我的 API 中使用 JWT,当我从邮递员发送 jwt 令牌或想要以 json 格式获取数据并在我的控制器上添加 Authorize 属性时,我收到错误 404

这些是我的代码:

这是我在单独类中的板条生成器:

 public static  string  GenerateJsonWebToken()
    {
        var  securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(CreateSlatConstant.Secret));
        var credetials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
        var claims = new[] {
            new Claim(JwtRegisteredClaimNames.Sub,"123"),
            new Claim("Admin","true"),
          
        };

        var token = new JwtSecurityToken(
            CreateSlatConstant.Issuer,
            CreateSlatConstant.Audiance,
            claims,
            notBefore:DateTime.Now,
            expires:DateTime.Now.AddMinutes(120),
            signingCredentials:credetials);

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

这是 JWTcontroller 通过此地址调用 slat https://localhost:44305/api/Jwt

[ApiController]
[Route("api/[controller]")]
public class JWTController : ControllerBase
{


    public IActionResult JwtToken()
    {
        var tt =  MI.Core.CreateSalt.GenerateJsonWebToken();
        return Ok(tt);
    }
}

这是我的 Api 项目中的 startup.cs

   services.AddAuthentication("OAuth")
.AddJwtBearer("OAuth", option =>
{
   option.TokenValidationParameters = new TokenValidationParameters
   {
      ValidIssuer = CreateSlatConstant.Issuer,
      ValidAudience = CreateSlatConstant.Audiance,
      IssuerSigningKey = new 
SymmetricSecurityKey(Encoding.UTF8.GetBytes(CreateSlatConstant.Secret))
   };
   });

这是我的控制,邮递员用令牌打电话

 [Route("api/[controller]")]
[ApiController]
[Authorize]
public class CompanyNameController : ControllerBase
{
    private ICompanyNameRepository _companyNameRepository;
    private IMapper _mapper;

    public CompanyNameController(ICompanyNameRepository companyNameRepository, IMapper mapper)
    {
        _companyNameRepository = companyNameRepository;
        _mapper = mapper;
    }
    [HttpGet]
    public async Task<IActionResult> GetCarCompanyAsync()
    {
        var cmObj = await _companyNameRepository.GetAllAsync();
        var cvvm = new List<CompanyNameVM>();

        foreach (var obj in cmObj)
        {
            cvvm.Add(_mapper.Map<CompanyNameVM>(obj));
        }
        return Ok(cvvm);
    }

在邮递员中发送带有我从 https://localhost:44305/api/Jwt 获得的令牌的 get 请求

和这个一样 在此处输入图像描述

在这种情况下,我收到错误消息,如果我删除 [Authorize] 属性,则无法访问此站点, 它可以正常工作,我的错误是什么?

标签: c#apijwt

解决方案


推荐阅读