【发布时间】: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 仅提供 SHA256withRSA。 http://jwt.io 提供 RS256 和 HS256 之间的选择,一个使用密钥,另一个使用秘密(公共/私人)。我猜我需要使用 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 等? :-)(如果对我有帮助,我愿意分享!)
感谢您的任何提示! (也许我只需要默认公钥,因为我使用的是默认密钥库!)
【问题讨论】: