Google OAuth2:缺少必需参数:grant_type

时间:2014-07-30 06:43:46

标签: node.js authentication oauth-2.0 google-oauth

我已经尝试过几乎所有内容,在这个问题上阅读每篇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);
  });

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:8)

正如@BenFortune已经提到的,我正在发送GET个参数作为POST请求。令人惊讶的是,在试图弄清楚它超过一个小时之后,这个微不足道的事情已经被忽视了。

现在,我指责OAuth提供商之间的不一致。在同一个应用程序中,我正在向 Facebook 发出GET请求以获取access_tokenhttps://graph.facebook.com/oauth/access_token。但 Google 希望POST请求获取access_tokenhttps://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