Node.js SameSite Cookie属性问题

Node.js SameSite Cookie属性问题,node.js,passport.js,express-session,samesite,Node.js,Passport.js,Express Session,Samesite,我有一个web应用程序,前端是react,后端是node 我使用passport saml策略进行passport身份验证。自从上次浏览器更新以来,我发现了一个问题。一旦我尝试登录,我被带到身份验证页面,它再次返回到应用程序页面,然后是身份验证页面,这将继续。看起来我在重定向循环中 一旦我在chrome中禁用了samesite属性标志,问题就解决了 我读了一些文章,意识到samesite属性导致了这种情况。(如果我错了,请纠正我。还想知道),我们将在后端添加此。。我正在使用node expres

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

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

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

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

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


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

我不确定这是否是您的情况,但我假设您的应用程序已部署(我没有在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中,并将令牌传递到请求体中,这不是理想的做法,但我认为这是保证ids安全的更安全的方法。

您的应用程序是否支持启用ssl的代理服务器

我有一个类似的问题,类似的设置和类似的症状,但我已经从saml切换到oauth(没有使用passport),所以我不确定这是否有帮助

无论如何,我需要做两件事来保持会话cookie对请求的“激活”

  • 在服务器代码中设置“信任代理”:
    app.Set('trust proxy',1)
  • 将X-Forwarded-Proto头设置为代理服务器配置(我的是nginx):

  • 使用的快速和快速会话版本“express”:“^4.14.0”和“快速会话”:“^1.17.1”,
        location / {
          proxy_set_header X-Forwarded-Proto $scheme;
          ...
        }