Подтвердить что ты не робот

POST в OAuth с учетными данными клиента с Doorkeeper

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

Теперь я пытаюсь выполнить вызов с использованием учетных данных клиента flow. Итак, я следил за примером в ссылке.

Все работает отлично, когда я использую запрос GET, но когда я использую запрос POST, я получаю 401 Unauthorized. Это вызов метода, который не требует владельца ресурса.

Единственное, что у меня есть в контроллере API:

doorkeeper_for :all

Я не реализовал никаких областей или ничего подобного (мне нужно?).

Мой клиентский код выглядит так (как в примере в github):

require 'rest-client'
require 'json'

client_id = 'my_client_id...'
client_secret = 'my_client_secret...'

response = RestClient.post 'http://localhost:3000/oauth/token', {
  grant_type: 'client_credentials',
  client_id: client_id,
  client_secret: client_secret
}
token = JSON.parse(response)["access_token"]

# this line works great:
RestClient.get 'http://localhost:3000/api/v1/flights.json', { 'Authorization' => "Bearer #{token}" }
# this line always fails (401 Unauthorized):
RestClient.post 'http://localhost:3000/api/v1/flights.json', { 'Authorization' => "Bearer #{token}" }

Любая идея, что я могу делать неправильно? Есть ли что-то особенное в моем приложении, чтобы включить поток учетных данных клиента?

4b9b3361

Ответ 1

Я понял это. Проблема в том, что я не использовал RestClient.post правильно. Второй параметр должен быть полезной нагрузкой, а третьим должен быть заголовок. Это должно быть примерно так:

RestClient.post 'http://localhost:3000/api/v1/flights.json', {}, { 'Authorization' => "Bearer #{token}" }