我正在使用带有OAuth2Strategy策略的Passport.js针对OIDC服务进行身份验证。该应用程序对需要Passport设置的connect.sid cookie的服务发出一些跨域请求。 Chrome浏览器承诺除非cookie的SameSite属性设置为“ Lax”,否则将停止支持这些请求。
我不确定该怎么做,因为Cookie的设置是Passport内部的。有什么建议么?以下是位于给OIDC服务的回调路由中的相关函数调用。
passport.authenticate("oauth2", function (err, user, info) {
if (err) {
req.flash('error', err);
res.redirect('/login_error/');
}
else if (!user) {
req.flash('error', 'Unable to locate user account.');
res.redirect('/login_error/');
}
else {
req.logIn(user, (err) => {
if (err) { return next(err); }
return res.redirect('/user_profile/);
});
}
})(req, res, next);
答案 0 :(得分:2)
答案:尝试使用href。或在客户端应用上将代理设置为服务器应用。
我也遇到过同样的问题。进行了广泛的研究。摘要如下。
用例和技术堆栈:使用Passport.js通过React和Express实施Google OAuth身份验证。在快递中使用CORS。另外,在Express中设置中间件,以将Access-Control-Allow-Origin, Access-Control-Allow-Headers and Access-Control-Allow-Credentials
添加到每个响应中。还是没用。
解决方案:唯一可行的解决方案是使用前端的href调用身份验证URL(例如/ auth / google)。或从客户端设置代理以将请求重定向到服务器(尚未尝试或测试)。
长期解决方案: Passport.js需要在发送给客户端以供chrome使用的cookie上添加same-site = none,以允许通过提取重定向请求。
核心问题:由于重定向问题,axios无法正常工作。验证后,OAuth API需要重定向到客户端URL。由于Chrome的same-site = lax cookie问题,无法进行提取。 XHR也面临问题。也许是重定向,Cookie和CORS挑战的结合。
PS 。还了解到,在Express中设置res.header('Access-Control-Allow-Origin','*')不适用于axios。 axios似乎需要特定的域