【问题标题】:Block regular users from Google auth callback Express Route阻止普通用户访问 Google auth callback Express Route
【发布时间】:2015-06-30 10:23:24
【问题描述】:

我有以下程序可以使用 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.

});

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

【问题讨论】:

  • 你用什么进行谷歌身份验证?护照?
  • @laggingreflex 只需使用我想要的范围简单地重定向到“accounts.google.com/o/oauth2/auth”。当用户接受时,Google 会将他们发送回我在开发者控制台中提供的重定向 URL,即“/oauth/google/callback”。

标签: node.js express oauth-2.0


【解决方案1】:

如果您使用的是 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)之外,谷歌重定向的请求和普通用户的直接请求没有区别。
(...req.headers.referer /origin 理论上可以工作,但they're unreliable and shouldn't be used as a measure)

【讨论】:

  • 哇,我怎么没想到呢?感谢 laggingreflex!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多