代码之家  ›  专栏  ›  技术社区  ›  codenamezero

如何使用mscapi。JWT签名的RSAPrivateKey?

  •  0
  • codenamezero  · 技术社区  · 8 年前

    我不知道该怎么问这个问题,但我正在尝试使用来自Web的各种Json Web令牌实现(无论是java jwt还是jjwt等),它们都接受 RSAPrivateKey 作为签署过程的一部分。

    然而,我的问题是,显然 mscapi.RSAPrivateKey 不提供与 java.security.interfaces.RSAPrivateKey 当我试图为它编写包装器类时,我不知道如何编写 getEncoded 或者 getFormat (我猜我应该返回“RS256”或类似的东西)函数。

    1. 我怎样包装 mscapi。RSA私钥 ?
    2. 正确的转换方法是什么 mscapi。RSA私钥 Java语言安全接口。RSA私钥 ?
    1 回复  |  直到 8 年前
        1
  •  2
  •   pedrofb    8 年前

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

    您描述的问题类似于 this . JWT似乎试图转换私钥,而mscapi包装器并没有实现通常的接口。

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