Google OAuth2: отсутствует обязательный параметр: тип гранта

Я пробовал почти все, читал каждый пост StackOverflow по этой проблеме, но я все еще не могу заставить его работать. Интересно, что я могу получить 200 OK ответ при отправке запроса POST через DHC REST API Client (приложение Google Chrome).

  var url = 'https://accounts.google.com/o/oauth2/token';
  var params = querystring.stringify({
    grant_type: 'authorization_code',
    code: req.body.code,
    client_id: req.body.clientId,
    client_secret: 'HIDDEN',
    redirect_uri: req.body.redirectUri
  });
  params = querystring.unescape(params); // doesn't work with or without string escaping

  request.post(url + '?' + params, function(error, response, body) {
    console.log(body);
  });

enter image description here

enter image description here

2 ответов


как @BenFortune уже упоминал, я отправлял GET параметры POST запрос. Удивительно, что такая тривиальная вещь осталась незамеченной после того, как пыталась понять это в течение часа.

теперь я обвиняю в этом несоответствия между поставщиками OAuth. В том же приложении я делаю GET запрос Facebook получить access_token: https://graph.facebook.com/oauth/access_token. Но Google ожидает POST запрос на получение access_token: https://accounts.google.com/o/oauth2/token

правильный вариант:

  var url = 'https://accounts.google.com/o/oauth2/token';
  var payload = {
    grant_type: 'authorization_code',
    code: req.body.code,
    client_id: req.body.clientId,
    client_secret: 'HIDDEN',
    redirect_uri: req.body.redirectUri
  };

  request.post(url, { form: payload }, function(error, response, body) {
    console.log(body);
  });

Проверьте кодировку запроса.

в моем случае я отправлял .JSON и был .URL-адрес

Использование Alamofire 3.0