0

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

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

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

1 回答 1

2

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

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

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

于 2017-11-21T17:20:13.763 回答