验证由 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,但没有关于库或任何东西的信息。
这里有一些更精确的问题:
- WSO2 APIM 仅提供 SHA256withRSA(这是 SHA2 IIUC 的一种形式)。 wso2carbon.jks 我发现的证书是 sha1。所以我想这无论如何都行不通。 APIM 如何使用 SHA1 证书生成 SHA256?
- WSO2 APIM 仅提供 SHA256withRSA。 http://jwt.io 提供 RS256 和 HS256 之间的选择,一个使用密钥,另一个使用秘密 (public/private)。我猜我需要使用 RS256? (但我唯一的密钥似乎来自 SHA1 证书)
- 有没有人在我做的事情上取得了成功?安装 WSO2 APIM,生成 JWT 并根据 http://jwt.io 验证 JWT,包括签名?
- 如果我使用 https://github.com/tymondesigns/jwt-auth 之类的库来验证 JWT,它会起作用吗?有人告诉我这个库不支持 SHA256.
- 在 APIM 中,我处于租赁状态,称为 sandbox。如果我去 super-tenancy carbon 我会看到 wso2carbon.jks。如果我去我自己租户的碳我看到 sandbox.jks,但它是空的,并且在部署机器上没有相应的文件。这是如何解决的,租赁 JKS 仅在使用时存在,还是存储在数据库中而不是文件系统中?
- 我可以在 public 论坛上展示多少我的代币、JWT 等? :-)(如果对我有帮助,我愿意分享!)
感谢任何提示!
(也许我只需要默认的 public 密钥,因为我使用的是默认密钥库!)
我自己回答,以防有人遇到同样的问题。
有两件事帮助了我:
- 首先,为了在 jwt.io 中进行验证,我需要通过 运行 以下命令更改证书编码:
openssl x509 -inform der -in somekey.cer -out somekey.pem
- 然后我使用超级租户密钥库而不是租户密钥库。我已经对此进行了调查,但没有在 APIM VM 上找到任何租赁密钥库。我不得不:
- 在 APIM 碳门户中以租户管理员身份登录
- 导航至 配置 / keystores
- 租户有一个密钥库(名为 sandbox1.jks),单击 public 密钥
- 保存下载的sandbox1.cert并使用上述命令将其转换为pem
生成的 pem 在 jwt.io 使用 RS256
时运行良好
希望这对其他人有帮助!
我正在尝试做一些看似简单但最终很难的事情,因为我缺乏专业知识。
我部署了一个没有自定义的 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 密钥。
我不知道在哪里可以找到那个钥匙。
我有 运行
我在 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,但没有关于库或任何东西的信息。
这里有一些更精确的问题:
- WSO2 APIM 仅提供 SHA256withRSA(这是 SHA2 IIUC 的一种形式)。 wso2carbon.jks 我发现的证书是 sha1。所以我想这无论如何都行不通。 APIM 如何使用 SHA1 证书生成 SHA256?
- WSO2 APIM 仅提供 SHA256withRSA。 http://jwt.io 提供 RS256 和 HS256 之间的选择,一个使用密钥,另一个使用秘密 (public/private)。我猜我需要使用 RS256? (但我唯一的密钥似乎来自 SHA1 证书)
- 有没有人在我做的事情上取得了成功?安装 WSO2 APIM,生成 JWT 并根据 http://jwt.io 验证 JWT,包括签名?
- 如果我使用 https://github.com/tymondesigns/jwt-auth 之类的库来验证 JWT,它会起作用吗?有人告诉我这个库不支持 SHA256.
- 在 APIM 中,我处于租赁状态,称为 sandbox。如果我去 super-tenancy carbon 我会看到 wso2carbon.jks。如果我去我自己租户的碳我看到 sandbox.jks,但它是空的,并且在部署机器上没有相应的文件。这是如何解决的,租赁 JKS 仅在使用时存在,还是存储在数据库中而不是文件系统中?
- 我可以在 public 论坛上展示多少我的代币、JWT 等? :-)(如果对我有帮助,我愿意分享!)
感谢任何提示! (也许我只需要默认的 public 密钥,因为我使用的是默认密钥库!)
我自己回答,以防有人遇到同样的问题。
有两件事帮助了我:
- 首先,为了在 jwt.io 中进行验证,我需要通过 运行 以下命令更改证书编码:
openssl x509 -inform der -in somekey.cer -out somekey.pem
- 然后我使用超级租户密钥库而不是租户密钥库。我已经对此进行了调查,但没有在 APIM VM 上找到任何租赁密钥库。我不得不:
- 在 APIM 碳门户中以租户管理员身份登录
- 导航至 配置 / keystores
- 租户有一个密钥库(名为 sandbox1.jks),单击 public 密钥
- 保存下载的sandbox1.cert并使用上述命令将其转换为pem
生成的 pem 在 jwt.io 使用 RS256
时运行良好希望这对其他人有帮助!