【问题标题】:Token error using Cloud Foundry API client credentials使用 Cloud Foundry API 客户端凭据的令牌错误
【发布时间】:2015-04-09 04:25:55
【问题描述】:

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

cf curl /v2/events

但我试图通过 Node.js 而不是通过the CLI 进行等效的底层调用。根据我对 OAuth2 的阅读,只读的非代理用户仅服务器端应用程序是 client credentials 的一个很好的用例。我找不到支持客户端凭据的 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"
}

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

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

【问题讨论】:

    标签: oauth-2.0 cloud-foundry cloudfoundry-uaa


    【解决方案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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-11
        • 2017-10-26
        • 2023-03-25
        • 2018-12-14
        • 1970-01-01
        • 2019-11-10
        • 2017-09-06
        • 2022-07-14
        相关资源
        最近更新 更多