【问题标题】:validating a JWT generated by WSO2 APIM 1.9.0: what's the public key?验证 WSO2 APIM 1.9.0 生成的 JWT:什么是公钥?
【发布时间】:2017-09-24 02:48:18
【问题描述】:

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

我部署的 APIM 没有自定义安全性(别担心,这不是生产!)。所以它只有 carbon.jks

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

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

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

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

我已经运行了RSA Public Key of WSO2carbon 中描述的命令行并生成了一个 .cert 文件。我检查了 portecle (http://portecle.sourceforge.net/) 中的 .cert 文件,但没有发现任何感兴趣的内容,但是在 Windows 中打开它给了我一个字段 "public key" ,看起来像 "30 81 89 02 81 81 00 94 a[...]",很长,显然是十六进制。

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

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

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

  • WSO2 APIM 仅提供 SHA256withRSA(这是一种 SHA2 IIUC)。我发现的 wso2carbon.jks 证书是 sha1。所以我想这无论如何都行不通。 APIM 如何生成带有 SHA1 证书的 SHA256?
  • WSO2 APIM 仅提供 SHA256withRSAhttp://jwt.io 提供 RS256HS256 之间的选择,一个使用密钥,另一个使用秘密(公共/私人)。我猜我需要使用 RS256? (但我唯一的密钥似乎来自 SHA1 证书)
  • 有人成功地完成了我的工作吗?安装 WSO2 APIM,生成 JWT 并针对 http://jwt.io 验证 JWT,包括签名?
  • 如果我使用 https://github.com/tymondesigns/jwt-auth 之类的库来验证 JWT,它会起作用吗?有人告诉我这个库不支持 SHA256
  • 在 APIM 中,我处于一个名为 sandbox 的租户中。如果我去超级租赁 carbon 我会看到 wso2carbon.jks。如果我去我自己的租户的 carbon 我看到 sandbox.jks,但它是空的,并且在部署机器上没有相应的文件。这是如何解决的,租赁 JKS 是仅在使用时才存在,还是存储在数据库中而不是文件系统中?
  • 我可以在公共论坛上展示多少我的代币、JWT 等? :-)(如果对我有帮助,我愿意分享!)

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

【问题讨论】:

    标签: wso2 jwt wso2-am


    【解决方案1】:

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

    有两件事帮助了我:

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

    生成的 pem 与使用 RS256 的 jwt.io 配合良好

    希望这对其他人有所帮助!

    【讨论】:

      猜你喜欢
      • 2022-06-18
      • 2015-07-30
      • 2018-04-10
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多