验证从 cloudfoundry cf 客户端获取的 jwt

verify jwt obtained from cloudfoundry cf client

我想更好地了解 uaa 客户端令牌验证如何与 cloud foundry 一起工作。

使用cloud foundry cf工具登录后,我使用

获得了签名令牌
cf oauth-token

据我了解,此令牌已由 cf 客户端签名,并包含我登录后从 uaa 收到的原始访问令牌。

现在我可以使用任何在线 jwt 解析器解码此令牌(令牌不是敏感信息,因为 cf 工具仅针对我本地的 bosh-lite 安装)。然而,我如何验证令牌是否正确?这通常是云控制器随后会执行的任务,对吗?

我尝试使用 JJWT java 库如下:

Jwts.parser().setSigningKey("").parseClaimsJws(token).getBody();

但它抱怨签名密钥为空。 cf 客户端使用的签名密钥是什么?客户端密钥是否已在 UAA 注册?

非常感谢任何澄清。

您只需要验证密钥(假设您确实想要验证令牌签名)

事情是这样的 1. 您可以在没有任何密钥的情况下解析 JWT 令牌,没有密钥它不应该验证签名 2. 如果您希望验证签名,请提供验证密钥

在uaa下找到验证码./token_keys

https://uaa.run.pivotal.io/token_keys

我目前的理解是CF CLI只是保存了UAA生成的编码和签名的token。此token是用UAA私钥签名的,只能用对应UAA的public验证秘钥进行验证。

为了验证该令牌,您有两种选择:

1) 使用 UAA 端点 (/check_token) 为您验证给定的令牌,在这种方法中您不需要 UAA 的验证密钥。

https://github.com/cloudfoundry/uaa/blob/master/server/src/main/java/org/cloudfoundry/identity/uaa/oauth/RemoteTokenServices.java

2) 获取UAA public 验证密钥(/token_key),并编写一些代码来验证jwt 签名。

https://github.com/cloudfoundry-incubator/routing-api/blob/master/authentication/token_validator.go

根据你所采用的方法,你可以使用JS模仿相应的实现。

希望对您有所帮助。