阻止普通用户使用 Google 身份验证回调 Express Route

Block regular users from Google auth callback Express Route

我有以下程序可以使用 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 重定向回应用程序以访问回调路由,并阻止普通用户使用它?

如果您正在使用 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)