news 2026/4/17 6:53:38

域登录态分享(类sso)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
域登录态分享(类sso)

遇到一个问题,在同一主域下的多个子域之间共享登录状态的需求。例如:

main.example.com 主站

learn.example.com 学习中心

希望在任意子域登录后,其他子域也能自动识别登录状态,包括登出同步。

Cookie 跨子域共享

浏览器安全策略允许 Cookie 在同一主域下共享,只需设置父域(.example.com 指的是包括 example.com 及子域名下都可以共用 cookie,单一指定直接放上域名即可):

请求来源 Cookie 域 是否生效

main.example.com .example.com ✅

learn.example.com .example.com ✅

示例:

Set-Cookie: sid=xxxxx; Domain=.example.com; Path=/; Secure; HttpOnly; SameSite=None

后端通过 Set-Cookie 响应头设置 Cookie,使其在所有子域生效。

自定义方案:集中式 Session(共享 sid 模型)

方案核心

所有系统在后端共用一个 Session 中心(存储登录 sid 与用户信息映射)。

用户在任一子域(如 main.example.com)登录后,后端生成唯一 sid 并通过 Set-Cookie 写入 .example.com 域。

其他子域(如 learn.example.com)访问时,会自动携带同一 Cookie 中的 sid。

各子域后端通过 Session 服务验证 sid 是否有效。

若 sid 存在且有效,则返回用户信息或签发 token。

退出登录时删除 sid,实现所有子域同步登出。

登录与验证流程

1. 用户登录(main.example.com)

// 前端仅调用登录接口

await fetch('https://api.main.example.com/login', {

method: 'POST',

body: JSON.stringify({ username, password }),

credentials: 'include'

});

后端示例(Node.js):

app.post('/login', (req, res) => {

const { username, password } = req.body;

const user = authenticate(username, password);

if (user) {

const sid = generateSid();

sessionStore.set(sid, user);

res.cookie('sid', sid, {

domain: '.example.com',

httpOnly: true,

secure: true,

sameSite: 'none',

path: '/',

});

res.json({ success: true });

} else {

res.status(401).json({ success: false });

}

});

2. 子域验证登录状态(learn.example.com)

请求示例:

await fetch('https://session.example.com/api/validate', {

credentials: 'include'

});

后端验证:

app.get('/api/validate', (req, res) => {

const sid = req.cookies.sid;

const session = sessionStore.get(sid);

if (session) {

res.json({ valid: true, user: session.user });

} else {

res.json({ valid: false });

}

});

3. 登出同步

所有子域使用同一域的 Cookie:

app.post('/logout', (req, res) => {

const sid = req.cookies.sid;

sessionStore.delete(sid);

res.clearCookie('sid', { domain: '.example.com', path: '/' });

res.json({ success: true });

});

与标准 SSO 的区别对比

特性 自定义集中 Session 模型 标准化 SSO(OAuth2 / OIDC)

登录管理中心 ✅ 有 Session 中心 ✅ 独立 IdP(认证中心)

登录凭证形式 sid(后端 Session) Access Token / ID Token(标准)

协议 ❌ 自定义 ✅ OAuth2 / OpenID Connect / SAML

安全性 ⚠️ 依赖服务端实现 ✅ 采用业界安全标准

跨域处理 通过共享 Cookie 统一跳转 + 授权码机制

登出同步 Cookie 统一清除 IdP 通知各客户端登出

扩展性 内部系统适用 可对外开放第三方登录

方案优缺点

优点

后端集中控制登录状态,安全性高。

实现简单,适合同一主域下多子系统。

通过 Set-Cookie 跨子域自动共享,无需前端参与。

缺点

无标准协议,不适合开放平台。

若 Session 存储异常,影响所有子系统。

无法跨不同主域(如 .example.com 与 .example.org)。

演进方向

若未来需要:

对接外部系统或移动端;

支持 OAuth2 授权流程;

集成权限管理;

应演进为 标准化 SSO 架构:

[main.example.com] --> [auth.example.com] <-- [learn.example.com]

└--> Issue JWT / Refresh Token

总结

场景 推荐方案

同一主域下多子域共享登录 ✅ 集中 Session 模型

不同主域间登录共享 ✅ 标准 SSO(OAuth2/OIDC)

内部系统快速集成 ✅ 自建 Session 验证机制

长期扩展性 ⚙️ 升级为标准认证中心

总结:这个方案是参考 SSO 实现(轻量化内部集中式 Session 模型),主要是在同一主域多子域场景下,也可以使用 nginx 代理指向不同文件夹,有兴趣可以自行了解。后面会出一个 sso 方案,为 OAuth2 / OpenID Connect 架构。有问题大家提出讨论会进行更正!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 18:18:45

撸一个功能强大的基于语义的图像检索系统

上一期视频中&#xff0c;我们介绍了Ultralytics框架下最新更新的语义检索功能&#xff0c;只需本地3行代码&#xff0c;就能构建一个基于文本语义的图像检索网站。然而&#xff0c;框架自带的界面较为固定&#xff0c;如果需要自定义界面&#xff0c;还需额外开发&#xff1b;…

作者头像 李华
网站建设 2026/4/16 17:53:08

收藏必看!《百面大模型》:从零基础到大厂面试的全链路实战指南

《百面大模型》是一本针对大模型求职者和学习者的实战型技术参考书&#xff0c;系统覆盖LLM基础原理、工程实践、应用落地等五大模块。全书通过100道核心面试题引导学习路径&#xff0c;结合项目实战和工程图解&#xff0c;帮助读者构建从知识扫盲到面试通关的完整成长路径。适…

作者头像 李华
网站建设 2026/4/6 14:16:20

Python 装饰器

thon 装饰器&#xff08;Decorator&#xff09;是一种高级语法&#xff0c;用于在不修改原函数代码的前提下&#xff0c;动态扩展函数或类的功能。它本质上是一个接收函数 / 类作为参数&#xff0c;并返回新函数 / 类的可调用对象&#xff0c;是函数式编程的典型应用。1、核心原…

作者头像 李华
网站建设 2026/4/8 20:26:43

多智能体架构实战指南:从单兵作战到协同工作

文章详解了多智能体架构从单兵作战到协同协作的转变&#xff0c;阐述了其核心思想(分工、协作、进化)和常见架构模式。通过客户服务场景实战&#xff0c;展示了如何使用LangGraph框架构建可治理的多智能体系统&#xff0c;并探讨了挑战、最佳实践及未来演进方向。多智能体使AI从…

作者头像 李华
网站建设 2026/4/17 9:02:01

在 Visual Studio 中引入计划功能(公开预览版)

工作原理计划功能通过透明的工具调用&#xff0c;以结构化的方式管理复杂任务。当您要求 Copilot 处理多步骤任务时&#xff0c;它会自动判断是直接响应&#xff0c;还是切换到内置的计划模式。简单的提示词会得到快速回复&#xff0c;而多步骤的提示词则会触发一个协同计划。启…

作者头像 李华