我不确定该怎么问,但是我试图从Web使用各种Json Web Token实现(无论是java-jwt还是jjwt等),它们都将RSAPrivateKey作为其签名过程的一部分。

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


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

最佳答案

不需要获取内容或包装私钥来签署JWT。密码提供程序(在您的情况下为mscapi)有意隐藏内容以保护内容免遭提取,或者因为它在物理上不可用(例如,使用智能卡)。但是mscapi允许使用该密钥进行签名或加密,因此您的库没有理由不能使用PrivateKey实例(不是RSAPrivate密钥)对jwt进行签名。

您描述的问题与this类似。似乎jjwt尝试强制转换PrivateKey,而mscapi包装器未实现通常的接口。

我认为如果需要getEncoded,则无法在mscapi密钥上创建包装器,因为正如我所说,您无权访问密钥资料。因此,我建议使用jjwt来构建令牌(header.payload)并使用标准签名API自己对其进行签名

07-27 16:31