Предоставление пароля владельца ресурса "должно быть POST-запросом" - PullRequest
1 голос
/ 25 апреля 2020

Я пытался заставить логин работать, используя пароль владельца ресурса oAuth, однако я не могу заставить его работать.

Я не создал бэкэнд, я отправляю запрос, я использую Invision Power Board . Я не могу найти примеры запросов с использованием простого fetch, поэтому я просто не уверен, что делаю что-то не так.

Вот мой запрос, отправляемый на стороне клиента:

const form = {
  'grant_type': 'password',
  'username': 'username',
  'password': 'pass',
  'scope': 'profile',
  'client_id': 'client_id',
}
  var formBody = [];
  for (var property in form) {
    var encodedKey = encodeURIComponent(property);
    var encodedValue = encodeURIComponent(form[property]);
    formBody.push(encodedKey + "=" + encodedValue);
  }
  formBody = formBody.join("&");
  await fetch(`https://example.com/oauth/token`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    },
    body: formBody
  })

Все, что я получаю, - это ошибка:

{
    "error": "invalid_request",
    "error_description": "request must be a POST request"
}

Я неправильно отформатировал это или я что-то упустил? Я следил за документами oAuth, но, возможно, я неправильно понял, как это сделать.

Это проблема с моим сервером?

Правка - Пример запроса с reqbin:

POST /oauth/token HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 85

grant_type=password&username=username&password=pass&scope=profile&client_id=client_id

Как ни странно, ответ здесь:

{
    "error": "invalid_client"
}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Согласно спецификации c, для потока паролей требуются учетные данные пользователя, а также учетные данные клиента. Но я не вижу в вашем запросе заголовок авторизации.

0 голосов
/ 25 апреля 2020

Вы используете метод POST, но ваше тело запроса не является допустимым application/x-www-form-urlencoded файлом.

Узнайте, как преобразовать объект в строку с кодировкой urlencoded и отправить его здесь: { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...