Ошибка токена при использовании учетных данных клиента Cloud Foundry API

Я пытаюсь создать плагин Hubot, который отправляет уведомления о событиях Cloud Foundry в наш чат, но у меня не получается моя голова против авторизации API в течение пары дней. По сути, я пытаюсь потреблять:

cf curl /v2/events

но я пытаюсь сделать эквивалентные базовые вызовы через Node.js, а не через CLI. Судя по тому, что я читал об OAuth2, серверное приложение только для чтения, не действующее от имени пользователя, является хорошим вариантом использования для учетные данные клиента. Я не смог найти клиентскую библиотеку CF для Node, которая поддерживает учетные данные клиента, поэтому я пытаюсь сделать это сам... безуспешно. Вот что я пробовал в 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. Вот мои успехи в плагине Hubot, если кто-то интересно.


person Aidan Feldman    schedule 08.04.2015    source источник


Ответы (2)


Проверьте свой файл ~/.cf/config.json. Этот файл используется командой cf для поддержания его текущего состояния. Там вы увидите токены безопасности: AccessToken и RefreshToken.

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

person Patrick Mueller    schedule 08.04.2015

У вас есть область cloud_controller.admin для вашего hubot-cf-test клиента? Я думаю, вам понадобится это для доступа к потоку событий.

person Josh Ghiloni    schedule 08.04.2015