news 2026/7/27 6:58:01

SSO(Single Sign On-单点登录)方案笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SSO(Single Sign On-单点登录)方案笔记

SO 其实是一套高度依赖中央授权服务器(IdP)的登录方案。

SSO的定义

SSO是一种身份验证机制,用户只需要使用一套凭据(比如用户名和密码)登录一次,就可以访问多个相互信任的应用程序或系统,而无需在每个应用中重新登录。

下文分析SSO如何达成这个目标。

SSO中的角色

存储Cookie(全局通用)

存储Cookie

存储Cookie

存储Cookie

用户

用户代理/浏览器

服务提供者 A

服务提供者 B

服务提供者 C

身份提供者

目录服务

用户(User)

身份:需要访问应用程序的最终用户

职责:

- 提供身份凭证(用户名/密码等)

- 发起认证请求

- 管理个人会话

特点:用户只需记住一套凭证,与IdP进行一次交互

服务提供者(Service Provider, SP)

身份:具体的应用程序或服务(如CRM系统、邮箱、内部网站等)

职责:

- 保护资源,要求认证后才能访问;

- 识别未认证的用户并将其重定向到IdP;

- 验证从IdP收到的认证断言/令牌;

- 管理本地应用会话;

特点:SP本身不验证用户密码,完全信任IdP的认证结果;

在 SSO 架构中,所有应用(Service Providers, SPs)都放弃了自主验证用户身份的权限,转而无条件地信任 IdP 做出的认证决定。

如何保障信任关系:每个 SP 都预先在 IdP 那里“注册”了自己,双方约定好了加密密钥、证书和通信协议。没有这个预先建立的信任,SSO 无法工作。

身份提供者(Identity Provider, IdP)

IdP 是整个SSO系统中唯一知道用户是谁、密码是什么、用户是否已登录的组件。它是所有身份信息的“唯一真相来源”。

身份:中央认证服务器,SSO体系的核心

职责:

存储和管理用户身份信息;

验证用户提交的凭证;

创建和管理全局会话;

生成安全的认证令牌/断言;

响应SP的认证验证请求;

特点:所有SP都信任IdP,IdP是"唯一真相来源"

用户代理(User Agent)

身份:通常是Web浏览器,也可以是移动App等客户端

职责:

在用户、SP和IdP之间传递请求和响应;

存储和管理Cookie(IdP的全局会话Cookie和各SP的本地会话Cookie);

处理HTTP重定向;

特点:是实现SSO流程的一个工具载体。

目录服务(Directory Service)- 该角色可选

身份:用户信息的存储后端(可选但常见)

职责:

存储用户身份数据(如Active Directory、LDAP、数据库)

为IdP提供用户凭证验证服务

特点:在实际企业部署中,IdP通常与目录服务集成

和OAuth协议的区别?

SSO和OAuth经常被一起提及,也常常被混淆,但它们解决的是两个完全不同的问题,只能说稍微有点相关性,但还是需要认真辨别出区别。

简单来说:

SSO(单点登录):是一个身份验证方案。

它解决的是“你是谁?”的问题,让你用一套密码可以登录多个系统。

OAuth 2.0:是一个授权方案。

它解决的是“这个应用能否访问我的特定数据?”的问题,让你在不分享密码的情况下,授权第三方应用访问你的资源。

多应用间的登录流程

应用B (SP)

认证中心 (IdP)

应用A (SP)

用户浏览器

应用B (SP)

认证中心 (IdP)

应用A (SP)

用户浏览器

第一阶段:用户首次访问应用A

此时浏览器与IdP建立会话

第二阶段:用户访问应用B

关键步骤:

浏览器与IdP的会话仍然有效

1. 访问应用A

2. 发现未登录,重定向到IdP

(携带回调地址)

3. 访问IdP登录页

4. 返回登录页面

5. 提交用户名/密码

6. 验证凭证,创建全局会话

7. 重定向回应用A

(携带令牌/Ticket)

8. 带着令牌访问应用A

9. 应用A与IdP后台通信,验证令牌

10. 返回用户信息(验证成功)

11. 创建本地会话,返回受保护资源

12. 访问应用B

13. 发现未登录,重定向到IdP

(携带回调地址)

14. 访问IdP(浏览器自动携带IdP会话Cookie)

15. 发现已有全局会话(用户已登录)

16. 立即重定向回应用B

(携带新的令牌/Ticket)

17. 带着新令牌访问应用B

18. 应用B与IdP后台通信,验证新令牌

19. 返回用户信息(验证成功)

20. 创建本地会话,返回受保护资源

完整的“创建全局会话”包含两个相互关联的动作:

服务器端(IdP侧): 在IdP的服务器上(例如在内存、Redis或数据库中)创建一个会话记录。

客户端(浏览器侧): 在用户的浏览器中,设置一个属于IdP域名的Cookie,其值通常就是这个服务器端会话记录的ID。

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

IBM Granite Docling 258M:轻量化文档智能的革命性突破

IBM Granite Docling 258M:轻量化文档智能的革命性突破 【免费下载链接】granite-docling-258M 项目地址: https://ai.gitcode.com/hf_mirrors/ibm-granite/granite-docling-258M 当传统OCR技术在复杂文档面前频频碰壁时,IBM Research在2025年9月…

作者头像 李华
网站建设 2026/7/26 0:45:38

PyOxidizer实战指南:告别Python部署难题的终极解决方案

PyOxidizer实战指南:告别Python部署难题的终极解决方案 【免费下载链接】PyOxidizer A modern Python application packaging and distribution tool 项目地址: https://gitcode.com/gh_mirrors/py/PyOxidizer 你是否曾经因为Python应用的部署问题而彻夜难眠…

作者头像 李华
网站建设 2026/7/26 3:55:39

SmartDNS在ImmortalWrt系统崩溃难题:从技术深潜到实战修复

你是否也遇到过这样的困扰?明明配置好了SmartDNS,期待它能加速你的网络访问,结果在ImmortalWrt系统中却频频崩溃,让人抓狂不已。别担心,今天我们就来彻底解决这个"顽疾",让你的SmartDNS在Immorta…

作者头像 李华
网站建设 2026/7/26 13:15:42

5步掌握nerfstudio与Blender自动化建模:从新手到高手的终极指南

5步掌握nerfstudio与Blender自动化建模:从新手到高手的终极指南 【免费下载链接】nerfstudio A collaboration friendly studio for NeRFs 项目地址: https://gitcode.com/GitHub_Trending/ne/nerfstudio 还在为复杂3D场景的手工建模耗费数天时间而烦恼吗&am…

作者头像 李华
网站建设 2026/7/26 22:45:14

最小多项式与线性递推

对角化在众多 dp 问题中,我们经常可以用矩阵快速幂进行优化。更进一步地,如果这个递推矩阵是一个形如 ,矩阵快速幂就显得大财小用了。因为显然 。对于这种只有主对角线上有值的矩阵,称为对角矩阵,它显然拥有很好的性质…

作者头像 李华
网站建设 2026/7/22 13:55:12

智能家居通知系统入门指南:从零开始配置Home Assistant提醒功能

智能家居通知系统入门指南:从零开始配置Home Assistant提醒功能 【免费下载链接】home-assistant.io :blue_book: Home Assistant User documentation 项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io 想要让你的智能家居真正"活起…

作者头像 李华