Google OAuth2: Required parameter is missing: grant_type

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

I have tried just about everything, read every StackOverflow post on this issue but I still can't get it to work. Interestingly enough, I am able to get 200 OK response when sending a POST request via DHC REST API Client (Google Chrome app).

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

回答1:

As @BenFortune has already mentioned, I was sending GET parameters as a POST request. It's amazing such a trivial thing has gone unnoticed after trying to figure it out for over an hour.

Now, I blame inconsistencies across OAuth providers for this. In the same application I am doing a GET request to Facebook to obtain access_token: https://graph.facebook.com/oauth/access_token. But Google expects a POST request to obtain access_token: https://accounts.google.com/o/oauth2/token

Correct version:

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


回答2:

Check the request Encoding.

in my case i was sending .json and was .url

Using Alamofire 3.0



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!