我有一个Web应用程序,在前端有react,在后端有node。
我正在将护照认证与护照saml策略一起使用。自上次浏览器更新以来,我看到了一个问题。尝试登录后,我被带到了身份验证页面,它再次返回到应用程序页面,然后是身份验证页面,并且此过程继续进行。好像我处于重定向循环中。
一旦我在chrome中禁用了samesite属性标志,问题就解决了。
我阅读了一些文章,并意识到由samesite属性引起的。 (如果我错了,请纠正我。也想知道),我们将在后端在哪里添加它。.我正在使用node express会话模块,并将cookie对象添加为:-
cookie: {sameSite: 'none', secure: true}
有人可以帮我找到解决方案吗?
答案 0 :(得分:0)
我不确定这是否是您的情况,但是我假设您的应用已部署(我在本地主机中还没有遇到这个问题,因此您的问题可能在其他地方)并且正在设置会话。
试图解决3天后。我终于找到了解决此问题的方法,这不是解决方法,我很确定PassportJS最终会提供针对该问题的解决方案,但现在它使我能够从身份验证中吸引用户。
由于我们无法从Cookie中获取用户,但是该信息在服务器会话中,因此获取此信息的方法是将其添加到“ server.js ”路由以直接从服务器会话中获取用户:
app.get('/api/getUser', (req, res) => {
res.json(req.session.user);
});
出于某种原因,我想某种程度上缺少cookie,在路由器内部使用req.session返回未定义,但是如果在'server.js'(或服务器索引文件)内部使用,它将获取该会话。 / p>
如果您需要req.user._id或其他一些敏感信息来处理其他请求,我建议将带有此信息的jwtToken返回到前端(在res.json中),然后将令牌直接保存在localStorage中并传递给您的请求正文中的令牌并不理想,但这是我认为可以确保ID安全的更安全的方法。
答案 1 :(得分:0)
您是在启用了ssl的代理服务器后面的应用程序吗?
我在相似的设置和相似的症状上也遇到了类似的问题,但是我已经从saml切换到oauth(无需使用护照),所以我不确定这是否对您有帮助。
无论如何,我需要做两件事来使会话cookie在请求中保持活动状态。
app.set('trust proxy', 1)
location / {
proxy_set_header X-Forwarded-Proto $scheme;
...
}