如何在不同的域之间共享cookie NodeJS



我的后端代码中有这个返回语句:

return res
.status(200)
.cookie("auth_token", token, {
httpOnly: false,
domain: "domain.com",
secure: true,
expires: new Date(Date.now() + (6 * 60 * 60 * 1000))
})
.send({
data: token,
code: "100",
message: `AUTHENTICATION SUCCESS. IP: ${clientIP}, Geo: ${location}, Info: ${
(app, os)
}`,
});

它在域domain.com上保存了JWT令牌,我希望这也能与domain2.com一起使用,例如,因为我的身份验证系统现在用于多个站点,并且它从不同的域运行到domain2.com

用户进入站点domain.com,该站点检查是否存在auth-tokencookie,如果不存在,则应重定向到完全不同的域auth.domain2.com。这是用户进行身份验证的地方;一旦他们确定了自己,上面的返回语句应该将cookie保存在他们的浏览器中,理想情况下是domain.comdomain2.com。之后,它们被重定向回domain.com,然后检查auth-tokencookie是否再次存在,如果存在,则检查其有效性,然后允许用户进入。

我试着只保存域的cookie,该域不是指定代码运行的域(例如上面的代码(:domain: "domain.com"domain: "domain2.com"仍然无法工作/保存该域的cookie。

这可能吗?如果没有,解决办法是什么?

一个域中的Cookie无法从另一个域访问,但这实际上不是所必需的。

您描述的登录流程对我来说意味着您需要两个cookie:

  1. 用户访问domain.com,登录流从重定向到auth.domain2.com开始
  2. 用户将其凭据发布到auth.domain2.com,并收到一个响应
    • 为域auth.domain2.com设置cookie a,并且
    • 将浏览器重定向回CCD_ 17(带有SAML响应或JWT或授权码或指示用户已成功登录的东西(
  3. 响应请求domain.com?SAMLResponse=...,浏览器接收域domain.com的cookie B(在您的情况下是名为auth_token的JWT(

之后,浏览器向domain.com发出的每个请求都包含cookie B,从而与domain.com建立会话。

如果用户稍后访问domain3.com(或在注销后返回到domain.com(,则启动到auth.domain2.com的第二登录流,但这一次,到auth.domain2.com的请求包含cookie a。因此,auth.domain2.com立即将浏览器重定向回domain3.com,而无需在上述步骤#2中请求凭证。

换句话说:Cookie A与auth.domain2.com建立会话,Cookie B与domain.com建立会话。(并且第三cookie C在第二登录流的步骤#3中建立与domain3.com的会话。(

这应该符合您的要求。

最新更新