java - 如何使用 mscapi.RSAPrivateKey 进行 JWT 签名?

标签 java jwt digital-signature mscapi jjwt

我不知道如何问这个问题,但我正在尝试使用来自网络的各种 Json Web Token 实现(无论是 java-jwt 还是 jjwt 等),它们都接受 RSAPrivateKey 作为签名过程的一部分。

但是我遇到的问题是,显然 mscapi.RSAPrivateKey 不提供与 java.security.interfaces.RSAPrivateKey 相同的 API,当我尝试时要为其编写包装类,我不知道如何编写 getEncodedgetFormat (我猜我应该返回“RS256”或类似的内容)功能。

  1. 如何封装 mscapi.RSAPrivateKey
  2. mscapi.RSAPrivateKey 转换为 java.security.interfaces.RSAPrivateKey 的正确方法是什么?

最佳答案

不需要获取内容或包装私钥来签署 JWT。加密提供程序(在您的例子中是 mscapi)故意隐藏内容以防止其被提取,或者因为它在物理上不可用(例如使用智能卡)。但 mscapi 允许使用该 key 进行签名或加密,因此您的库没有理由不能使用 PrivateKey 实例(不是 RSAPrivate Key)对 jwt 进行签名

您描述的问题类似于 this 。看来 jjwt 试图强制转换 PrivateKey,而 mscapi 包装器没有实现通常的接口(interface)。

如果需要 getEncoded,我认为您不能在 mscapi 键上创建包装器,因为正如我所说,您无权访问 key Material 。所以我建议使用jjwt构建token(header.payload)并使用标准签名api自行签名

关于java - 如何使用 mscapi.RSAPrivateKey 进行 JWT 签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47399562/

相关文章:

java - AdMob 自定义事件插页式广告不显示

security - JWT(JSON Web Token)自动延长过期时间

Django Rest JWT 使用用户名或电子邮件登录?

javascript - 如何在javascript中使用证书的私钥对消息进行签名

java - 不同的编码器提供不同的编码值

ssl - 证书 key 使用警告

java - Mule:在 spring bean 上设置属性

java - 有时必须等待很长时间,直到 HttpClient.execute() 抛出异常

java - 大型数据集的三重存储

django - 注销 Django Rest Framework JWT