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

时间:2017-11-20 19:23:45

标签: java jwt digital-signature mscapi jjwt

我不确定如何问这个,但我试图从网上使用各种Json Web Token实现(无论是java-jwt还是jjwt等),它们都需要{{1作为签署过程的一部分。

然而我遇到的问题是,显然RSAPrivateKey没有提供与mscapi.RSAPrivateKey相同的API,当我尝试为其编写包装类时,我不知道关于如何写java.security.interfaces.RSAPrivateKeygetEncoded(我猜测我应该返回" RS256"或类似的东西)功能。

  1. 如何包装getFormat
  2. mscapi.RSAPrivateKey转换为mscapi.RSAPrivateKey
  3. 的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

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

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

如果需要getEncoded,我认为你不能在mscapi密钥上创建一个包装器,因为正如我所说,你无法访问密钥资料。所以我建议使用jjwt构建令牌(header.payload)并使用标准签名api自己签名