谷歌oauth多重定向uris将无法正常工作

时间:2015-02-26 23:46:34

标签: node.js oauth google-api

我有一个使用googleapis oauth的node.js应用程序。

我的开发者控制台设置了两个重定向uris:http://i.imgur.com/qraUa4Y.jpg

我可以使用redirect_uri进行https://accounts.google.com/o/oauth2/auth的初始调用,使其成为/ token或/ update

成功回调后,我尝试使用以下代码交换令牌代码:

var exchangeToken = function (params) {
  var post_data = querystring.stringify({
    code: params.code,
    client_id: credentials.client_id,
    client_secret: credentials.client_secret,
    redirect_uri: 'https://www.example.org/token', //this line won't work
    grant_type: 'authorization_code'
  });

  var req = https.request({
    host: 'www.googleapis.com',
    path: '/oauth2/v3/token',
    method: 'POST',
    port: 443,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': post_data.length
    }
  }, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) { 
      console.log('BODY: ' + chunk); 
    }); 
  }); 

  req.write(post_data);
  req.end();

};

如果我将redirect_uri设置为/ token,则调用将失败,返回

BODY: {
 "error": "redirect_uri_mismatch",
 "error_description": "Bad Request"
}

但如果我改为/更新它可行。初始请求接受两个网址,但是这个网址因/ token而失败。

出了什么问题?

2 个答案:

答案 0 :(得分:2)

仔细检查您之前在授权请求中发送的内容是否与您在令牌端点的请求中发送的内容相匹配。您可以使用在API控制台中配置的任一URL,但在两个请求中都必须相同。

答案 1 :(得分:0)

确保redirect_uri:'https://www.example.org/token'在Google Client API上配置的与“授权重定向URI” 块相同。

就我而言,它有效... !!!