1

我想更好地了解 uaa 客户端令牌验证如何与云代工合作。

使用cloud foundry cf工具登录后,我已经从使用中获得了一个签名令牌

cf oauth-token

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

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

我尝试使用 JJWT java 库,如下所示:

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

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

任何澄清都非常感谢。

4

2 回答 2

4

我目前的理解是 CF CLI 只是保存由 UAA 生成的编码和签名的令牌。这个令牌是用 UAA 私钥签名的,只能用对应的 UAA 的公钥验证密钥进行验证。

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

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公共验证密钥(/token_key),并编写一些代码来验证jwt签名。

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

根据您采用的方法,您可以使用 JS 模拟相应的实现。

我希望这会有所帮助。

于 2016-01-27T23:32:06.160 回答
2

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

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

验证密钥在 uaa./token_keys 下

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

于 2016-01-27T19:25:53.240 回答