asp.net-web-api – JwtSecurityTokenHandler 4.0.0重大改变?
发布时间:2020-12-16 09:11:55 所属栏目:asp.Net 来源:网络整理
导读:这是 Linqpad中JwtSecurityTokenHandler 4.0.0的简化测试.该代码适用于JwtSecurityTokenHandler 3.0.2,生成并验证了令牌.在4.0.0中,经过必要的更改后,我不断收到SecurityTokenSignatureKeyNotFoundException:IDX10500:签名验证失败.无法解析SecurityKeyIde
这是
Linqpad中JwtSecurityTokenHandler 4.0.0的简化测试.该代码适用于JwtSecurityTokenHandler 3.0.2,生成并验证了令牌.在4.0.0中,经过必要的更改后,我不断收到SecurityTokenSignatureKeyNotFoundException:IDX10500:签名验证失败.无法解析SecurityKeyIdentifier.显然有些事情发生了变化,或者我做错了什么,新版本更严格.有什么建议?
string jwtIssuer = "issuer"; string jwtAudience = "audience"; X509Store store = new X509Store(StoreName.My,StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); X509Certificate2 cert = store.Certificates.OfType<X509Certificate2>().FirstOrDefault( c => c.SubjectName.Name.Equals("CN=DEV_CERT",StringComparison.OrdinalIgnoreCase)); store.Close(); // Token generation and signing X509SigningCredentials signingCredentials = new X509SigningCredentials(cert); JwtSecurityTokenHandler jwtHandler = new JwtSecurityTokenHandler(); IList<System.Security.Claims.Claim> payloadClaims = new List<System.Security.Claims.Claim>() { new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Name,"name"),}; #if JWT302 Lifetime lifetime = new Lifetime(DateTime.UtcNow,DateTime.UtcNow.AddSeconds(24*60*60)); JwtSecurityToken jwt = new JwtSecurityToken( jwtIssuer,jwtAudience,payloadClaims,lifetime,signingCredentials); #else JwtSecurityToken jwt = new JwtSecurityToken( jwtIssuer,DateTime.UtcNow,DateTime.UtcNow.AddSeconds(24*60*60),signingCredentials); #endif string token = jwtHandler.WriteToken(jwt); // Token validation var signingToken = new RsaSecurityToken((RSACryptoServiceProvider)cert.PublicKey.Key); JwtSecurityTokenHandler jwtHandler2 = new JwtSecurityTokenHandler(); #if JWT302 TokenValidationParameters vp = new TokenValidationParameters() { AllowedAudience = jwtAudience,ValidIssuer = jwtIssuer,ValidateIssuer = true,SigningToken = signingToken }; var principal = jwtHandler2.ValidateToken(token,vp); #else TokenValidationParameters vp = new TokenValidationParameters() { ValidAudience = jwtAudience,IssuerSigningToken = signingToken }; SecurityToken validatedToken; var principal = jwtHandler2.ValidateToken(token,vp,out validatedToken); #endif 解决方法
在以下情况下抛出此异常:
> jwt有’小孩’ 在我们调查此问题时,您可以使用委托TokenValidationParameters.IssuerSigningKeyResolver直接返回签名时使用的签名密钥. 要实现此设置:TokenValidationParameters.IssuerSigningkeyResolver到一个函数,它将返回您在TokenValidationParameters.SigningToken中设置的相同键.此委托的目的是指示运行时忽略任何“匹配”语义并尝试键. 如果签名验证仍然失败,则可能是一个关键问题. 如果签名验证没有失败,则运行时可能需要修复. 如果您可以向我们提供使用该公钥签名的jwt,那将有助于我们进行修复. 谢谢你给我们一个尝试,抱歉麻烦. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 什么是部分回发?
- asp.net应用程序中的内存泄漏 – W3WP和第2代堆继续增长,直
- asp.net – Devexpress网格延迟加载
- asp.net-mvc-4 – 使用KNOCKOUT.JS和ASP.NET MVC 4进行级联
- nTier应用程序中的.Net会员资格
- ASP.NET MVC – 查看主页,如何设置标题?
- asp.net – ASHX httpHandler检测到一个潜在危险的Request.
- 使用ASP.NET MVC 3助手的标题属性的渲染跨度标签
- asp.net – 无法完成操作.提供的SqlConnection不指定初始目
- asp.net – 如何确定IUSR密码
推荐文章
站长推荐
- asp.net-mvc – 带密码的.NET核心分布式Redis缓存
- asp.net-mvc – 将返回文件的长时间运行进程
- asp.net-mvc – 作为静态文件的根目录的项目子目
- asp.net – 实体框架ObjectContext重用
- 在Asp.NET中黑客会话变量
- ASP.NET OutputCache和回发
- asp.net-core – 丰富Serlilogs,每个hangfire工作
- asp.net-mvc-4 – ASP.NET MVC 4中的单页面应用程
- asp.net – 用于DropDownList的MVC2 EditorTempl
- 什么是最好的.NET库的OpenID和ASP.NET MVC?
热点阅读