我已经尝试过几乎所有内容,在这个问题上阅读每篇StackOverflow帖子,但我仍然无法让它发挥作用。有趣的是,当通过DHC REST API客户端(谷歌Chrome应用程序)发送POST请求时,我能够获得 200 OK 响应。
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);
});
答案 0 :(得分:8)
正如@BenFortune已经提到的,我正在发送GET
个参数作为POST
请求。令人惊讶的是,在试图弄清楚它超过一个小时之后,这个微不足道的事情已经被忽视了。
现在,我指责OAuth提供商之间的不一致。在同一个应用程序中,我正在向 Facebook 发出GET
请求以获取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);
});
答案 1 :(得分:0)
检查请求编码。
在我的情况下,我发送.json并且是.url
使用Alamofire 3.0