SameSite Cookie属性问题

时间:2020-08-26 12:44:19

标签: node.js passport.js express-session samesite

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

我正在将护照认证与护照saml策略一起使用。自上次浏览器更新以来,我看到了一个问题。尝试登录后,我被带到了身份验证页面,它再次返回到应用程序页面,然后是身份验证页面,并且此过程继续进行。好像我处于重定向循环中。

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

我阅读了一些文章,并意识到由samesite属性引起的。 (如果我错了,请纠正我。也想知道),我们将在后端在哪里添加它。.我正在使用node express会话模块,并将cookie对象添加为:-

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

有人可以帮我找到解决方案吗?

2 个答案:

答案 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在请求中保持活动状态。

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