验证由 WSO2 APIM 1.9.0 生成的 JWT:public 键是什么?

validating a JWT generated by WSO2 APIM 1.9.0: what's the public key?

我正在尝试做一些看似简单但最终很难的事情,因为我缺乏专业知识。

我部署了一个没有自定义的 APIM security-wise(别担心,这不是生产环境!)。所以它只有 carbon.jks.

我使用 SAML2 针对 IDS 对应用程序中的用户进行身份验证,然后将 APIM 与应用程序密钥一起用于从 SAML2 令牌生成的用户令牌。我从 APIM 获得一个 OAuth 令牌,我用它来调用 APIM 中的 API。 (请注意,我设法解决了这个问题,多亏了前段时间这里的另一个 post :-))

实现 API 的后端收到一个 JWT 作为结果,其中包含 header、用户信息和应用程序信息以及签名。 对于我的第一个测试,我编写了自己的 "hello world" 后端,用于记录 JWT。

我使用 http://jwt.io 它可以毫无问题地读取我的 JWT。但它告诉我签名无效。 为了使签名有效,我需要一个有效的 public 密钥。

我不知道在哪里可以找到那个钥匙。

我有 运行 and generated a .cert file. I have examined the .cert file in portecle (http://portecle.sourceforge.net/) 中描述的命令行,但没有发现任何有趣的东西,但是在 Windows 中打开它给了我一个字段 "public key",看起来像 "30 81 89 02 81 81 00 94 a[...]",很长,很明显是十六进制。

我在 http://jwt.io 中尝试了这个及其 base64 编码表示,但没有成功。

因为我想知道我的 public 钥匙在哪里,所以我还阅读了: How to validate a JWT from WSO2 API Manager (以及引用的 link https://asankad.org/2013/12/05/obtaining-certificate-used-to-sign-a-jwt/ ) 然而,提供的代码有点独立,甚至没有提及语言。我假设它是 node.js,但没有关于库或任何东西的信息。

这里有一些更精确的问题:

感谢任何提示! (也许我只需要默认的 public 密钥,因为我使用的是默认密钥库!)

我自己回答,以防有人遇到同样的问题。

有两件事帮助了我:

  • 首先,为了在 jwt.io 中进行验证,我需要通过 运行 以下命令更改证书编码:openssl x509 -inform der -in somekey.cer -out somekey.pem
  • 然后我使用超级租户密钥库而不是租户密钥库。我已经对此进行了调查,但没有在 APIM VM 上找到任何租赁密钥库。我不得不:
    1. 在 APIM 碳门户中以租户管理员身份登录
    2. 导航至 配置 / keystores
    3. 租户有一个密钥库(名为 sandbox1.jks),单击 public 密钥
    4. 保存下载的sandbox1.cert并使用上述命令将其转换为pem

生成的 pem 在 jwt.io 使用 RS256

时运行良好

希望这对其他人有帮助!