0

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

cf curl /v2/events

但我试图通过 Node.js 而不是通过CLI进行等效的底层调用。根据我对 OAuth2 的阅读,只读的 not-acting-on-behalf-of-a-user server-side-only 应用程序是客户端凭据的一个很好的用例。我找不到支持客户端凭据的 Node 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"
}

我做错了什么愚蠢的小事?提前致谢!

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

4

2 回答 2

1

你有cloud_controller.admin你的hubot-cf-test客户的范围吗?我想你需要它来访问事件流。

于 2015-04-08T20:25:55.207 回答
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

于 2015-04-08T11:33:05.700 回答