《深入解析单点登录(SSO)的实现原理》
一、基于Cookie的单点登录原理
1、共享Cookie域
- 在一个大型企业或者多个相关联的系统中,如果要实现单点登录,当用户登录到一个主系统(例如企业的门户系统)时,系统会在用户浏览器中设置一个Cookie,这个Cookie的域(domain)设置为一个顶级域名或者一个共享的父域名,企业有多个子系统,如mail.example.com、crm.example.com等,Cookie的域可以设置为.example.com,这样,当用户访问其他子系统时,浏览器会自动带上这个Cookie。
图片来源于网络,如有侵权联系删除
- 子系统在接收到带有这个Cookie的请求时,会向一个专门的认证服务器(可以是门户系统兼任,也可以是独立的)发送验证请求,认证服务器根据Cookie中的信息(如用户标识、登录状态等)来判断用户是否已经登录,如果已经登录,就允许用户访问子系统,不再要求用户重新登录。
2、Cookie加密与签名
- 为了确保Cookie的安全性,其中存储的信息通常是经过加密和签名的,加密是为了防止Cookie中的敏感信息(如用户ID)被窃取和篡改,可以使用对称加密算法(如AES)对用户相关的信息进行加密,签名则是为了验证Cookie的完整性,防止Cookie在传输过程中被恶意修改,通常使用非对称加密算法(如RSA)的私钥对Cookie内容进行签名,子系统可以使用对应的公钥来验证签名的有效性。
- 当用户在主系统登录成功后,主系统会生成一个包含加密和签名信息的Cookie,例如包含用户的唯一标识、登录时间戳等信息,子系统在验证Cookie时,先验证签名,如果签名有效,再解密获取用户信息进行进一步的登录状态验证。
二、基于SAML(安全断言标记语言)的单点登录原理
1、身份提供者(IdP)与服务提供者(SP)
- 在基于SAML的单点登录架构中,有身份提供者(IdP)和服务提供者(SP)两个主要角色,身份提供者是负责验证用户身份的系统,例如企业内部的集中式身份验证服务器,服务提供者则是各个需要进行单点登录的子系统,如不同的业务应用程序。
图片来源于网络,如有侵权联系删除
- 当用户首次访问一个服务提供者(SP)时,SP会检测到用户未登录(例如通过检查本地会话状态或者特定的标识),然后将用户重定向到身份提供者(IdP)进行登录,SP会在重定向请求中包含一些自身的信息,如SP的实体标识(用于IdP识别是哪个SP发起的请求)。
2、断言交换与验证
- 用户在IdP登录成功后,IdP会生成一个SAML断言,这个断言包含了用户的身份信息、属性(如用户角色、权限等)以及关于身份验证的一些元数据(如验证时间、验证方法等),IdP会将这个SAML断言以一种安全的方式(如通过重定向或者POST请求)发送回给SP。
- SP收到SAML断言后,会根据预先配置的IdP的公钥来验证断言的签名,以确保断言的来源是合法的IdP并且在传输过程中没有被篡改,SP会解析断言中的用户信息,根据这些信息建立本地的会话,从而实现用户的单点登录,如果断言中表明用户是具有管理员权限的员工,SP可以根据这个信息为用户提供相应的管理员功能界面。
三、基于OAuth(开放授权)的单点登录原理(以OAuth 2.0为例)
1、授权服务器与资源服务器
- 在OAuth 2.0的单点登录场景中,有授权服务器和资源服务器的概念,授权服务器负责对用户进行身份验证和授权,资源服务器则是存储用户资源(如用户的个人信息、文档等)并且需要被保护的系统,在一个社交媒体平台中,授权服务器负责验证用户登录,而用户的照片、动态等数据所在的服务器就是资源服务器。
图片来源于网络,如有侵权联系删除
- 当用户尝试登录一个第三方应用(可以看作是一个资源服务器或者与之相关联的系统)时,第三方应用会将用户重定向到授权服务器,第三方应用会向授权服务器注册一个客户端标识(client - id)和客户端密钥(client - secret),这些信息用于在授权过程中识别第三方应用。
2、授权码流程与令牌获取
- 授权服务器会提示用户进行登录(如果用户未登录),用户登录成功后,授权服务器会根据用户的授权设置(用户是否同意第三方应用访问某些信息),生成一个授权码(authorization code)并通过重定向将授权码发送回第三方应用。
- 第三方应用收到授权码后,会使用客户端密钥和授权码向授权服务器请求访问令牌(access token),授权服务器验证授权码和客户端信息后,会颁发访问令牌,第三方应用使用访问令牌就可以访问用户在资源服务器中的相关资源,实现单点登录的效果,一个健身应用可以通过单点登录获取用户在社交媒体平台上的基本信息用于个性化推荐,而用户不需要在健身应用中再次输入登录信息。
单点登录(SSO)的不同实现原理都旨在提高用户体验,减少用户在多个系统间登录的繁琐操作,同时保障系统的安全性和用户信息的保密性,不同的实现原理适用于不同的应用场景,企业或开发者可以根据自身的需求进行选择。
评论列表