SameSite Cookie属性问题



我有一个web应用程序,前端有react,后端有node。

我使用护照验证和护照saml策略。自从上次浏览器更新以来,我看到了一个问题。一旦我尝试登录,我就被带到了身份验证页面,它再次返回到应用程序页面,然后是身份验证页面。看起来我在重定向循环中。

一旦我在chrome中禁用了samesite属性标志,问题就得到了解决。

我读了一些文章,意识到samesite属性导致了这种情况。(如果我错了,请纠正我。还想知道(,我们将在后台添加这个。。我使用nodeexpress会话模块,并添加了一个cookie对象作为:-

cookie: {sameSite: 'none', secure: true}

有人能帮我找到解决办法吗?

您的应用程序是否在启用ssl的代理服务器后面?

我也遇到过类似的问题,有类似的设置和类似的症状,但我已经从saml切换到oauth(不使用护照(,所以我不确定这是否对你有帮助。

无论如何,我需要做两件事来保持会话cookie在请求中的"活力"。

  1. 在服务器代码中设置"信任代理":app.set('trust proxy', 1)
  2. 将X-Forwarded-Proto头设置为代理服务器配置(我的是nginx(:
location / {
proxy_set_header X-Forwarded-Proto $scheme;
...
}

我不确定你的情况是否如此,但我假设你的应用程序已经部署(我在localhost中没有遇到这个问题,所以你的问题可能在其他地方(,并且你的会话正在设置中。

经过三天的努力想明白。我终于找到了解决这个问题的方法,这不是一个修复,我很确定PassportJS最终会提供解决方案,但目前它允许我从身份验证中获取用户。

由于我们无法从cookie中获取用户,但信息在服务器会话中,因此获取这些信息的方法是向">server.js"添加一条直接从服务器会话获取用户的路由:

app.get('/api/getUser', (req, res) => {
res.json(req.session.user);
});

出于某种原因,我认为缺少cookie,在路由器内部使用req.session会返回未定义的结果,但如果在"server.js"(或服务器索引文件(内部使用,它会获得会话。

如果你需要req.user_id或其他一些敏感信息来处理其他请求,我建议你向前端返回一个带有此信息的jwtToken(在res.json中(,然后将令牌直接保存在localStorage中,并将令牌传递到你的请求体中,这不是理想的方法,但我认为这是保持id安全的更安全的方法。

相关内容

最新更新