我不确定该怎么问,但是我试图从Web使用各种Json Web Token实现(无论是java-jwt还是jjwt等),它们都将RSAPrivateKey
作为其签名过程的一部分。
但是我遇到的问题是,显然mscapi.RSAPrivateKey
没有提供与java.security.interfaces.RSAPrivateKey
相同的API,并且当我尝试为其编写包装器类时,我不知道如何编写getEncoded
或getFormat
(我想我应该返回“ 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自己对其进行签名