验证从cloudfoundry cf client

时间:2016-01-27 16:00:37

标签: oauth-2.0 jwt cloudfoundry cloudfoundry-uaa

我想更好地了解uaa客户端令牌验证如何与云代工厂一起使用。

使用云代工厂cf工具登录后,我已经使用

获得了签名代币
cf oauth-token

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

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

我尝试过如下使用JJWT java库:

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

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

任何澄清都非常感谢。

2 个答案:

答案 0 :(得分:3)

我目前的理解是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模仿相应的实现。

我希望有所帮助。

答案 1 :(得分:2)

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

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

验证密钥位于uaa./token_keys

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