使用Cloud Foundry API客户端凭据进行令牌错误

时间:2015-04-08 05:46:49

标签: oauth-2.0 cloudfoundry cloudfoundry-uaa

我正在尝试创建一个Hubot插件,该插件会将Cloud Foundry事件的通知发送到我们的聊天室,但是几天来我一直在反对API身份验证。基本上,我正在尝试消费:

cf curl /v2/events

但我试图通过Node.js而不是通过the CLI进行等效的底层调用。从我对OAuth2的阅读中,一个只读的非代表用户服务器端应用程序是client credentials的一个很好的用例。我无法找到支持客户端凭据的节点的CF客户端库,所以我自己尝试这样做...不成功。这是我在bash中试过的:

CLIENT_ID=hubot-cf-test
CLIENT_SECRET=mysecret

uaac client add $CLIENT_ID --secret $CLIENT_SECRET --scope uaa.none --authorized_grant_types "client_credentials"
curl -X POST --user "$CLIENT_ID:$CLIENT_SECRET" -d 'grant_type=client_credentials' https://uaa.mycloudfoundry.com/oauth/token

# copy in access_token value from previous response
curl -H "Authorization: Bearer eyJhbGc..." https://api.mycloudfoundry.com/v2/events

给了我

{
  "code": 1000,
  "description": "Invalid Auth Token",
  "error_code": "CF-InvalidAuthToken"
}

我做错了什么傻事?提前谢谢!

P.S。 Here是我在Hubot插件上的进展,如果有人感兴趣的话。

2 个答案:

答案 0 :(得分:1)

检查您的~/.cf/config.json文件。 cf命令使用该文件来维护它的当前状态。您会在其中看到安全令牌:AccessTokenRefreshToken

AccessToken是您应该用于CLIENT_SECRET的内容,但是该令牌的生命周期非常很短 - 想想分钟。一旦它过期,您需要使用RefreshToken获取一个新的。因此,我们需要找到一个显示刷新令牌的示例,您可以在之后为代码建模。

权威引用是cf命令本身的来源;这里有一些代码,在这里:https://github.com/cloudfoundry/cli/blob/master/cf/api/authentication/authentication.go

如果你更像是一个Java用户,那么这里有一些代码:https://github.com/cloudfoundry/cf-java-client/blob/master/cloudfoundry-client-lib/src/main/java/org/cloudfoundry/client/lib/oauth2/OauthClient.java

还有关于UAA的更多信息,请点击此处:https://github.com/cloudfoundry/uaa/blob/master/docs/UAA-APIs.rst

答案 1 :(得分:1)

您的cloud_controller.admin客户端的范围是hubot-cf-test吗?我认为你需要这样才能访问事件流。