阻止普通用户使用 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)
我有以下程序可以使用 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)