c# - 即使令牌已验证,控制器仍未经授权返回
问题描述
嗨,我正在添加基于 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方案。”, });
解决方案
推荐阅读
- counter - 使用 LPTIM 在 STM32 上进行频率测量
- algorithm - 无限时间后在矩阵中寻找水的算法
- android - 如何从资产文件夹在webview中加载pdf
- php - 使用返回实例的方法是反模式吗?
- android - Error:(88, 46) error: cannot access TintableBackgroundView class file for androidx.core.view.TintableBackgroundView not found
- sql - S3 选择无效路径组件
- c++ - 在 main() 范围之外尝试 catch 块
- python - Jupyter 如何抓取与特定值匹配的整行
- c - 在 Windows 上使用 C 中的 WideCharToMultiByte 将 UTF-16 转换为 UTF-8
- python - 如何根据某些条件更改熊猫中的列值