单点登录(SSO)原理与实现
一、单点登录概述
图片来源于网络,如有侵权联系删除
单点登录(Single Sign - On,SSO)是一种身份验证机制,它允许用户使用一组凭据(如用户名和密码)登录一次,然后在多个相关但独立的应用程序或系统中无需再次登录即可访问资源,这种机制在企业级应用、大型网站集群等场景中广泛应用,旨在提高用户体验、简化管理并增强安全性。
二、单点登录的实现原理
1、共享认证信息
基于Cookie的SSO
- 在同一个域名下,当用户在一个应用中登录成功后,服务器会在用户浏览器中设置一个Cookie,这个Cookie包含了用户的身份标识等认证信息,其他应用在接收到用户请求时,可以检查这个Cookie来确定用户是否已经登录,在一个企业内部有多个子系统,如办公自动化系统、邮件系统和项目管理系统,它们都在同一个顶级域名(如company.com)下的不同子域名(如oa.company.com、mail.company.com、pm.company.com),当用户登录oa.company.com时,认证服务器会在浏览器中设置一个名为例如“company_auth”的Cookie,当用户访问mail.company.com时,邮件系统的服务器可以读取这个Cookie来判断用户是否已经登录。
基于Token的SSO
- 当用户登录成功后,认证服务器会生成一个加密的Token(令牌),这个Token包含了用户的身份信息、权限信息和有效期等内容,用户在访问其他应用时,将这个Token作为请求的一部分(通常放在请求头中)发送给应用服务器,应用服务器接收到Token后,通过解密和验证其签名来确定Token的有效性和用户身份,在一个微服务架构的系统中,用户登录后得到的Token可以在不同的微服务之间传递,每个微服务都可以根据这个Token来确定用户是否有权限访问其资源。
2、单点登录协议
SAML(Security Assertion Markup Language)协议
- SAML是一种基于XML的开源标准协议,用于在不同的安全域之间交换认证和授权数据,它主要涉及三个角色:身份提供者(IdP - Identity Provider)、服务提供者(SP - Service Provider)和用户(User),当用户试图访问SP提供的服务时,SP会将用户重定向到IdP进行身份验证,IdP验证用户身份后,会向SP发送一个包含用户身份断言(Assertion)的SAML响应,这个断言包含了用户的身份信息、属性(如角色等)以及认证方式等内容,SP根据这个断言来决定是否允许用户访问其服务,在一个高校联盟的数字化资源共享平台中,不同高校的信息系统可能作为SP,而联盟统一的身份认证中心作为IdP,当学生从自己学校的图书馆系统(SP)访问联盟内其他高校的学术资源(另一个SP)时,就会通过SAML协议进行单点登录认证。
图片来源于网络,如有侵权联系删除
OAuth(Open Authorization)协议
- OAuth主要用于授权而不是传统意义上的身份验证,但在单点登录场景中也有广泛应用,它允许用户授权第三方应用访问其在某个服务提供商(如社交媒体平台)上的资源,而无需向第三方应用透露自己的用户名和密码,在单点登录中,例如一个企业应用想要集成微信登录功能,微信作为身份提供者,企业应用作为客户端(类似于服务提供者),用户在企业应用中选择微信登录时,企业应用会将用户重定向到微信的授权页面,用户在微信授权后,微信会向企业应用返回一个访问令牌(Access Token),企业应用可以根据这个令牌获取用户的基本信息并完成登录流程。
3、中央认证服务器(CAS - Central Authentication Server)
- CAS是一种流行的单点登录解决方案,它的工作原理是,当用户访问某个应用(称为客户端应用)时,客户端应用会检查用户是否已经登录,如果没有登录,客户端应用会将用户重定向到CAS服务器,CAS服务器提供一个登录界面,用户在此输入用户名和密码进行登录,一旦登录成功,CAS服务器会创建一个全局会话(Global Session)并为用户生成一个票据(Ticket),CAS服务器会将用户重定向回客户端应用,并将票据作为参数传递给客户端应用,客户端应用收到票据后,会向CAS服务器验证这个票据的有效性,如果票据有效,客户端应用就认为用户已经登录成功,可以为用户提供服务,在一个大型企业的众多内部业务系统中,CAS服务器可以作为统一的登录入口,各个业务系统作为CAS的客户端,实现单点登录功能。
三、单点登录的实现过程
1、用户登录阶段
- 当用户首次访问一个应用(假设为应用A)时,应用A检测到用户未登录,将用户重定向到单点登录服务器(如基于CAS或使用SAML的身份提供者),用户在单点登录服务器的登录页面输入用户名和密码,单点登录服务器对用户输入进行验证,如果验证通过,会创建一个包含用户身份信息的会话(如在服务器端的内存中存储用户对象),同时根据单点登录协议(如SAML或基于自定义的Cookie或Token机制)生成一个标识用户已登录的凭证(如SAML断言、加密的Token或设置特定的Cookie)。
2、访问其他应用阶段
- 当用户想要访问另一个应用(应用B)时,应用B检测到用户未登录(通过检查本地没有相关的登录状态标识,如没有对应的Cookie或有效的Token),于是将用户重定向到单点登录服务器,单点登录服务器识别出用户已经登录(通过检查之前创建的会话或验证用户携带的凭证),然后根据应用B的请求,按照单点登录协议生成一个新的凭证(如针对应用B的特定Token或者在SAML响应中添加应用B所需的属性),并将用户重定向回应用B,应用B收到这个凭证后,验证其有效性,如果有效则认为用户已经登录,可以根据用户的身份信息和权限信息为用户提供服务。
3、登出阶段
图片来源于网络,如有侵权联系删除
- 当用户在单点登录系统中选择登出时,单点登录服务器会清除与用户相关的会话信息(如删除服务器端内存中的用户对象),单点登录服务器会通知所有已经登录的应用(通过某种机制,如发送登出通知消息或者使相关的Cookie或Token失效),这些应用收到通知后,也会清除与该用户相关的本地登录状态(如删除本地的Cookie或使本地存储的Token无效),从而实现全面的登出操作。
四、单点登录的安全考虑
1、凭证安全
- 无论是Cookie、Token还是SAML断言,都需要进行加密和签名处理,Token应该使用强加密算法(如AES)进行加密,并且使用私钥进行签名,以防止Token被篡改或伪造,对于Cookie,应该设置为HttpOnly属性,防止JavaScript脚本获取Cookie内容,减少跨站脚本攻击(XSS)带来的风险。
2、传输安全
- 在单点登录过程中,用户的认证信息在网络上传输时必须使用安全的协议,如HTTPS,这样可以防止中间人攻击,确保用户的用户名、密码、Token等敏感信息在传输过程中的保密性和完整性。
3、身份提供者安全
- 身份提供者(如单点登录服务器)是单点登录系统的核心,它需要具备强大的安全防护机制,包括对用户密码的安全存储(如使用哈希算法加盐存储)、防止暴力破解攻击(如设置登录失败次数限制和锁定机制)以及对服务器的安全加固(如安装防火墙、入侵检测系统等)。
单点登录通过共享认证信息、遵循特定的协议以及借助中央认证服务器等方式,为用户提供了便捷的登录体验,同时通过一系列的安全措施保障了系统的安全性和可靠性,在当今数字化的企业和互联网应用场景中,单点登录已经成为提高用户效率和管理便利性的重要技术手段。
评论列表