验证WSO2 APIM 1.9.0生成的JWT:公钥是什么?

时间:2017-04-26 15:32:21

标签: wso2 jwt wso2-am

我试图做一些看似简单的事情但最终难以做到,因为我缺乏专业知识。

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

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

实现API的后端会收到JWT,包括标题,用户信息和应用信息以及签名。 对于我的第一次测试,我写了自己的"你好世界"后端,记录JWT。

我使用http://jwt.io设法读取我的JWT没有任何问题。但它告诉我签名无效。 为了使签名有效,我需要一个有效的公钥。

我不知道在哪里可以找到该密钥。

我运行了RSA Public Key of WSO2carbon中描述的命令行并生成了 .cert 文件。我已经检查了 portecle http://portecle.sourceforge.net/)中的 .cert 文件,但没有发现任何兴趣,但是在Windows中打开它给了我一个字段&# 34;公钥" ,看起来像" 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,但没有关于libs或任何东西的信息。

以下是一些更精确的问题:

  • 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之类的lib来验证JWT,它会起作用吗?我被告知这个lib不支持 SHA256
  • 在APIM我的租赁中,名为沙箱。如果我进入超级租赁,我会看到 wso2carbon.jks 。如果我查看自己租用的碳,我会看到 sandbox.jks ,但它是空的,而在部署计算机上没有相应的文件。这是如何解决的,租约JKS是否仅在使用时存在,还是存储在数据库而不是文件系统中?
  • 我可以在公共论坛上展示我的代币,JWT等多少? :-)(如果它有助于我,我愿意分享!)

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

1 个答案:

答案 0 :(得分:0)

Answering myself in case anyone has the same issue.

Two things helped me out:

  • first, to validate in jwt.io, I needed to change the cert encoding by running the following command: openssl x509 -inform der -in somekey.cer -out somekey.pem
  • then I was using the super-tenant keystore instead of the tenancy keystore. I had looked into this but not found any tenancy keystore on the APIM VM. I had to:
    1. log in as tenant admin in APIM carbon portal
    2. navigate to configure / keystores
    3. there was a keystore for the tenancy (called sandbox1.jks), click on public key
    4. save the downloaded sandbox1.cert and convert it to pem using the above command

The resulting pem worked fine with jwt.io using RS256

Hope this helps others!