阻止来自Google身份验证回拨快速路由的常规用户

时间:2015-06-29 22:10:39

标签: node.js express oauth-2.0

我有以下程序登录Google:

app.get('/oauth/google', function(req, res) {
  res.redirect(<OAUTH2_URL>);
});

app.get('/oauth/google/callback', function(req, res, next) {

  var code = req.query.code;
  if(!code || !_.isString(code)) {
    return next(new Error(400, 'Invalid code'));
  }

  .
  .
  .

  // I try the code to see if it is valid.

});

我如何只允许Googles重定向回应用程序以访问回调路由,并阻止普通用户使用它?

1 个答案:

答案 0 :(得分:2)

如果您正在使用sessions,那么您可以在重定向到Google之前设置/oauth/google路径中的标记,然后在/oauth/google/callback上只需检查该标记,并重置。

app.get('/oauth/google', function(req, res) {
  req.session.authFlag = true;
  res.redirect(<OAUTH2_URL>);
});

app.get('/oauth/google/callback', function(req, res, next) {
  if (!req.session.authFlag) return next(new Error(403, 'Forbidden'));
  else req.session.authFlag = false;
  ...
});

如果您不使用会话,或由于某种原因会话无法使用,因为客户端不支持Cookie(这也应该是上述解决方案中的一个问题!),那么我想你最好的选择就是检查req.query.code,因为除了查询字符串(req.query.code)之外,Google重定向的请求与普通用户发出的直接请求之间没有区别。<登记/> (... req.headers.referer / origin可以在理论上 但是they're unreliable and shouldn't be used as a measure