首页 > 解决方案 > 即使令牌已验证,控制器仍未经授权返回

问题描述

嗨,我正在添加基于 jwt 令牌的身份验证,但当用户请求令牌然后被授权拨打电话时仍然遇到问题。我已经在 jwt.io 上检查了它,但是当我把我的密钥放在那里时它是有效的。

所以我不确定还有什么可能。

这是我的代码。

 [AllowAnonymous]
 [HttpPost]
 public IActionResult CreateToken([FromBody] LoginModel login) {
        IActionResult response = Unauthorized();
        var user = Authenticate(login);

        if (user != null) {
            var tokenString = BuildToken(login);
            response = Ok(new { token = tokenString });
        }

        return response;

 }

这就是我建立代币的方式

 private string BuildToken(LoginModel login) {
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["JwtToken:SecretKey"]));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
        JwtSecurityToken token;

            token = new JwtSecurityToken(_config["JwtToken:Issuer"],
          _config["JwtToken:Issuer"], expires: DateTime.Now.AddMinutes(30),
          signingCredentials: creds); 
        return new JwtSecurityTokenHandler().WriteToken(token);
 }

当我检查 get 调用时,即使我使用 swagger 授权它,它仍然没有得到授权?并使用令牌调用的响应?

在此处输入图像描述

编辑 2 即使添加以下内容,我仍然会收到 401。

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]

代码详细信息 401 未记录的错误:响应标头日期:2020 年 5 月 22 日星期五 22:36:30 GMT 服务器:Microsoft-IIS/10.0 状态:401
www-authenticate:Bearer x-powered-by:ASP.NET

编辑 3

我应该声明我正在使用 swagger Ui 通过标准方法传递屏障令牌。c.AddSecurityDefinition("bearer", new OpenApiSecurityScheme { Name = "Authorization", Type = SecuritySchemeType.ApiKey, Scheme = "bearer", BearerFormat = "JWT", In = ParameterLocation.Header, Description = "JWT Authorization header using the Bearer方案。”, });

我有一种感觉,这并没有像它应该做的那样传递到我的标题上? 在此处输入图像描述

标签: c#asp.net-web-api2

解决方案


推荐阅读