You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel多应用自动单点登录(SSO)实现方案咨询

跨子域SSO自动登录实现方案

要实现主域名main.com登录后,子域名A.main.com、B.main.com自动登录,核心是利用跨子域Cookie共享+统一身份验证逻辑,以下是具体实现步骤和注意事项:

核心逻辑

将登录态Cookie的domain属性设为父域名.main.com,这样所有子域名都能读取该Cookie;后端通过统一的身份验证机制校验Cookie中的凭证,完成自动登录。

1. 配置跨子域登录Cookie

用户在main.com登录成功后,后端设置Cookie时必须指定domain为.main.com(注意前缀的点),同时配置必要的安全属性:

  • path: '/':确保所有路径都能访问该Cookie
  • httpOnly: true:防止XSS攻击窃取Cookie
  • secure: true:仅在HTTPS环境下传输Cookie(生产环境强制开启)
  • sameSite: 'Lax':平衡安全性和可用性,适配大多数场景

示例代码(Node.js/Express):

res.cookie('auth_token', userAuthToken, {
  domain: '.main.com',
  path: '/',
  httpOnly: true,
  secure: process.env.NODE_ENV === 'production',
  sameSite: 'Lax',
  maxAge: 7 * 24 * 60 * 60 * 1000 // 7天有效期
});

2. 子域名的身份验证流程

A.main.com和B.main.com的后端服务需要做以下处理:

  • 接收请求时,提取Cookie中的auth_token
  • 通过统一的验证机制(如调用主域名的验证接口、查询共享数据库/Redis)校验token的有效性和过期时间
  • 验证通过后,自动为用户创建本地会话(或直接用token维持登录状态),返回已登录页面

3. 统一用户数据存储

主域名和所有子域名的后端必须共享用户身份数据:

  • 可以使用同一个Redis实例存储会话token与用户信息的映射
  • 或共用同一套数据库存储用户账号数据,确保验证逻辑一致性

4. 同步注销流程

当用户在main.com注销时,后端需要:

  • 清除.main.com域下的auth_tokenCookie
  • (可选)调用子域名的注销接口,清除子域名的本地会话(如果有),确保全域名登出

关键注意事项

  • 强制HTTPS:Secure属性的Cookie仅在HTTPS下生效,生产环境必须启用HTTPS,避免Cookie明文传输被窃取
  • Cookie安全属性:HttpOnly和Secure是必选项,能大幅降低XSS和中间人攻击风险
  • 跨域请求凭证:如果前端从子域名调用主域名接口,需在AJAX请求中设置withCredentials: true,同时后端配置CORS允许携带凭证(Access-Control-Allow-Credentials: true)
  • 避免敏感数据:Cookie中仅存储加密的身份凭证(如JWT、会话ID),绝对不能存放密码、手机号等敏感信息

内容的提问来源于stack exchange,提问作者Abhi shetty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:55:21