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);
});
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