我的后端代码中有这个返回语句:
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-token
cookie,如果不存在,则应重定向到完全不同的域auth.domain2.com
。这是用户进行身份验证的地方;一旦他们确定了自己,上面的返回语句应该将cookie保存在他们的浏览器中,理想情况下是domain.com
和domain2.com
。之后,它们被重定向回domain.com
,然后检查auth-token
cookie是否再次存在,如果存在,则检查其有效性,然后允许用户进入。
我试着只保存域的cookie,该域不是指定代码运行的域(例如上面的代码(:domain: "domain.com"
到domain: "domain2.com"
仍然无法工作/保存该域的cookie。
这可能吗?如果没有,解决办法是什么?
一个域中的Cookie无法从另一个域访问,但这实际上不是所必需的。
您描述的登录流程对我来说意味着您需要两个cookie:
- 用户访问
domain.com
,登录流从重定向到auth.domain2.com
开始 - 用户将其凭据发布到
auth.domain2.com
,并收到一个响应- 为域
auth.domain2.com
设置cookie a,并且 - 将浏览器重定向回CCD_ 17(带有SAML响应或JWT或授权码或指示用户已成功登录的东西(
- 为域
- 响应请求
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
的会话。(
这应该符合您的要求。