【问题标题】:SameSite Cookie attribute issueSameSite Cookie 属性问题
【发布时间】:2020-12-15 06:35:31
【问题描述】:

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

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

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

我阅读了一些文章并意识到相同站点属性导致了这种情况。 (如果我错了,请纠正我。也想知道),我们将在后端添加这个..我使用节点快速会话模块并添加了一个 cookie 对象:-

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

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

【问题讨论】:

  • 使用 express 和 express-session 版本 "express": "^4.14.0" 和 "express-session": "^1.17.1",

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


【解决方案1】:

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

经过 3 天的努力想通了。我终于找到了解决这个问题的方法,这不是修复,我很确定 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 安全的更安全的方式。

【讨论】:

    【解决方案2】:

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

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

    无论如何,我需要做两件事来使会话 cookie 在请求中保持“活跃”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 2020-07-13
      • 2020-04-17
      • 2020-12-13
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多