c# - 使用 AddJwtBearer() 使用令牌 - 无法验证签名
问题描述
我已经尝试了几天在我的 .net core 2.1 Web 服务中使用 jwt 令牌。令牌被SecurityTokenInvalidSignatureException: IDX10503: Signature validation failed.
-exception 拒绝。
我的设置很简单:
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(configureOptions => {
configureOptions.ClaimsIssuer = "http://localhost/";
configureOptions.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Convert.FromBase64String("zeey+h0M8mvWSR9HYKlNns+....")),
ValidateIssuer = true,
ValidIssuer = "http://localhost/",
ValidateAudience = true,
ValidAudience = "efb4f12d020b434c9b531af96263b3fa",
};
});
将收到的令牌放入https://jwt.io/,发现签名有效:
但我的网络服务仍然拒绝承认令牌。
我究竟做错了什么?
解决方案
我终于找到了我的问题的答案:
我的钥匙错了。但即使使用正确的密钥,我仍然得到同样的错误......
在构建 时
SymmetricSecurityKey
,我不得不使用Encoding.Unicode.GetBytes(...)
代替Encoding.ASCII
orEncoding.UTF8
。我仍然在使用 jwt.io 时遇到问题。我猜这个网站不再是验证令牌的好地方。
推荐阅读
- c - 具有柔性阵列成员的不透明结构
- azure-active-directory - 我可以在 Windows Pro 中设置 Active Directory 域服务还是需要 Windows Server 操作系统?
- inheritance - 无法继承 hasMany 属性
- node.js - Nodejs 异步良好实践
- swift - Swift 5 更新后 Firebase Cocoa Pods 错误
- ansible - 使用 Ansible 获取 AWS 实例详细信息
- java - 如何更新 PostgreSQL 数据库中的时间戳列?
- laravel - 使用 PhpUnit 测试在 Laravel 5 包中包含 @include 或 @extend 指令的刀片视图
- javascript - 如何在本机反应中有条件地呈现警报组件
- c# - 限制从课堂外访问财产