单点登录(SSO)流程图及实现方案解析
一、单点登录流程图
(一)用户首次访问应用A
1、用户请求访问应用A,应用A检测到用户未登录,重定向用户到单点登录系统(SSO Server),并在重定向请求中携带应用A的标识(如AppID),以便SSO Server识别来源应用。
2、SSO Server接收到请求后,检查是否存在有效的用户会话,如果没有,向用户展示登录页面。
图片来源于网络,如有侵权联系删除
3、用户在登录页面输入用户名和密码,SSO Server对用户凭据进行验证。
(二)SSO Server验证成功后
1、SSO Server创建一个全局会话(Global Session),并生成一个代表该会话的令牌(Token),这个令牌包含用户身份信息等相关数据。
2、SSO Server将用户重定向回应用A,并在重定向请求中包含令牌。
3、应用A接收到带有令牌的请求后,使用预先共享的密钥(如果有)验证令牌的合法性,如果验证通过,应用A根据令牌中的用户信息创建本地会话(Local Session),用户成功登录应用A。
(三)用户访问应用B
1、用户请求访问应用B,应用B检测到用户未登录,同样重定向用户到SSO Server,并携带应用B的标识。
2、SSO Server发现已经存在该用户的全局会话(通过检查之前创建的令牌或者会话记录),直接将用户重定向回应用B,并附带令牌。
3、应用B验证令牌后创建本地会话,用户无需再次输入用户名和密码即可登录应用B。
(四)用户登出
1、当用户在某个应用(如应用A)中发起登出操作时,应用A首先销毁本地会话,然后向SSO Server发送登出请求。
2、SSO Server接收到登出请求后,销毁全局会话,并通知所有已登录的相关应用(如应用B)进行登出操作,各个应用收到通知后销毁本地会话。
二、单点登录实现方案
(一)基于Cookie的单点登录
1、原理
- 当用户在SSO Server登录成功后,SSO Server在用户浏览器中设置一个Cookie,这个Cookie包含用户的登录状态信息,当用户访问其他应用时,应用可以读取这个Cookie来判断用户是否已经登录。
- 在一个企业内部,有多个业务系统,SSO Server为域名为example.com设置了一个名为sso_token的Cookie,当用户访问应用A.example.com和应用B.example.com时,浏览器会自动带上这个Cookie,应用通过解析Cookie中的sso_token来验证用户身份。
2、优点
图片来源于网络,如有侵权联系删除
- 简单易用,对现有应用的改造相对较小,许多Web应用本身就依赖Cookie来管理用户会话,基于Cookie的SSO可以较好地融入这种体系。
- 不需要复杂的网络通信协议,浏览器自动处理Cookie的传递。
3、缺点
- 安全性依赖于Cookie的安全设置,如果Cookie被窃取,可能会导致安全漏洞,跨站脚本攻击(XSS)可能会获取Cookie中的敏感信息。
- 不同域名之间共享Cookie存在限制,如果应用分布在不同的主域名下,如app1.company1.com和app2.company2.com,实现Cookie共享会比较复杂。
(二)基于令牌(Token)的单点登录
1、原理
- SSO Server在用户登录成功后生成一个令牌,这个令牌是一个加密的字符串,包含用户身份信息、有效期等内容,当用户访问其他应用时,应用将令牌发送到SSO Server或者使用预先共享的密钥自行验证令牌的有效性。
- 使用JSON Web Token(JWT),它是一种自包含的令牌格式,SSO Server使用私钥对用户信息进行签名生成JWT,应用可以使用公钥来验证JWT的签名,从而确认令牌的合法性。
2、优点
- 跨平台性好,可以在不同的应用环境中使用,包括Web应用、移动应用等。
- 令牌可以携带更多的自定义信息,灵活性高,而且由于是加密的,安全性相对较高。
3、缺点
- 需要对令牌进行加密和解密操作,这会增加一定的计算开销,如果密钥管理不当,可能会导致安全问题,私钥泄露会使伪造令牌变得容易。
- 令牌的有效期管理需要谨慎,如果有效期过短,可能会导致用户频繁重新登录;如果有效期过长,又会增加安全风险。
(三)基于SAML(安全断言标记语言)的单点登录
1、原理
- SAML是一种基于XML的标准协议,在单点登录场景中,SSO Server作为身份提供者(IdP),应用作为服务提供者(SP),当用户请求访问应用时,应用(SP)将用户重定向到SSO Server(IdP)进行登录,SSO Server验证用户身份后,会向应用发送一个包含用户身份断言(Assertion)的SAML响应,应用根据预先配置的规则验证断言,从而确定用户身份并创建本地会话。
图片来源于网络,如有侵权联系删除
2、优点
- 是一种成熟的、被广泛认可的标准协议,适用于企业级的复杂环境,尤其是在不同组织之间进行单点登录集成时非常有用。
- 提供了丰富的安全机制,如数字签名、加密等,可以确保身份断言的完整性和保密性。
3、缺点
- 由于基于XML,消息相对复杂,解析和处理需要更多的资源和时间。
- 实现和配置相对复杂,需要对SAML的相关概念和技术有深入的了解,对于小型应用或者开发资源有限的项目来说可能不太适用。
(四)基于OAuth/OIDC(开放授权/开放ID连接)的单点登录
1、原理
- OAuth主要用于授权,而OIDC是基于OAuth 2.0的身份验证协议,在单点登录场景中,用户通过授权服务器(相当于SSO Server)进行身份验证,OIDC在OAuth的基础上增加了身份标识(ID Token)的概念,用户登录后,授权服务器会颁发访问令牌(Access Token)用于访问资源,以及ID Token用于标识用户身份,应用通过验证这些令牌来实现单点登录。
2、优点
- 非常适合现代的互联网应用场景,尤其是涉及到第三方应用集成的情况,一个企业的应用允许用户使用社交媒体账号登录,就可以利用OAuth/OIDC。
- 具有良好的安全性和可扩展性,支持多种授权模式和不同类型的客户端(如Web应用、移动应用、原生应用等)。
3、缺点
- 协议相对复杂,需要正确处理各种令牌的颁发、验证和刷新流程。
- 对于一些传统的、内部的企业应用来说,可能需要更多的改造才能适应OAuth/OIDC的架构。
不同的单点登录实现方案各有优缺点,企业或开发者需要根据自身的应用场景、安全需求、开发资源等因素来选择合适的单点登录方案。
评论列表