You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jose-jwt生成JWT成功但RSA公钥验证失败求助

解决jose-jwt库RSA公钥验证JWT时的类型错误

问题根源在于你获取公钥的方式不对:GetPublicKey()返回的是原始字节数组,而jose-jwt库的RS256算法验证需要传入AsymmetricAlgorithm类型的对象(如RSACryptoServiceProvider或RSA),而非字节数组,这就是报错RsaUsingSha alg expects key to be of AsymmetricAlgorithm type.的原因。

修正后的公钥验证代码

根据你使用的.NET版本,选择对应的实现:

.NET Framework 版本

var crtFilePath = string.Format("{0}\\{1}", baseDir, "jwt-auth-certificate.crt");
var cipher = "private-key-cipher";
// 加载证书并获取RSA公钥对象
var cert = new X509Certificate2(crtFilePath, cipher);
var publicKey = cert.PublicKey.Key as RSACryptoServiceProvider;
// 验证并解码JWT
var data = Jose.JWT.Decode(token, publicKey);

.NET Core/.NET 5+ 版本(推荐)

var crtFilePath = string.Format("{0}\\{1}", baseDir, "jwt-auth-certificate.crt");
var cipher = "private-key-cipher";
using var cert = new X509Certificate2(crtFilePath, cipher);
// 获取强类型的RSA公钥对象
using var publicKey = cert.GetRSAPublicKey();
var data = Jose.JWT.Decode(token, publicKey);

补充说明

  • JWT.NET库内部自动处理了公钥字节数组到算法对象的转换,所以能正常验证,但jose-jwt要求直接传入已初始化的非对称算法实例。
  • 如果你的证书没有设置密码,创建X509Certificate2实例时可以省略密码参数。

内容的提问来源于stack exchange,提问作者Steven Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:27:15