本文目录导读:
单点登录(SSO)的实现方式
基于Cookie的单点登录
1、原理
图片来源于网络,如有侵权联系删除
- 当用户在一个应用(称为源应用)登录成功后,服务器会在用户浏览器中设置一个Cookie,这个Cookie包含了用户的登录标识信息,如用户ID、登录状态等,当用户访问其他关联应用(目标应用)时,目标应用会检查浏览器中的这个Cookie,如果Cookie存在且有效,目标应用就认为用户已经登录,无需再次输入用户名和密码。
- 在一个企业内部,有办公系统A和文件管理系统B,用户登录办公系统A后,系统A在用户浏览器设置了包含登录信息的Cookie,当用户访问文件管理系统B时,B系统检测到这个Cookie,解析出用户信息,从而实现单点登录。
2、实现要点
Cookie共享:不同的应用需要能够共享这个Cookie,这可能需要将这些应用部署在同一个域名下(子域名共享Cookie),或者通过特殊的配置来实现跨域Cookie共享,设置Cookie的domain属性为父域名,这样在父域名下的子域名应用就可以共享该Cookie。
Cookie安全:为了防止Cookie被篡改或窃取,需要对Cookie中的信息进行加密,可以使用对称加密算法(如AES)或非对称加密算法(如RSA)对用户标识等关键信息进行加密处理,设置Cookie的secure和httponly属性,确保Cookie只能通过安全的https连接传输,并且不能被JavaScript脚本访问,提高安全性。
基于Token的单点登录
1、原理
- 用户登录成功后,认证服务器会生成一个Token(令牌),并将其返回给用户,这个Token包含了用户的身份信息,并且经过加密处理,用户在访问其他应用时,将这个Token携带在请求中(通常放在请求头中,如Authorization头),目标应用收到请求后,会将Token发送到认证服务器进行验证,如果验证通过,就认为用户已经登录。
- 以一个电商平台为例,用户登录到主站后,认证服务器生成Token,当用户访问平台的订单查询系统或商品推荐系统时,将Token携带过去,这些系统验证Token的有效性后实现单点登录。
2、实现要点
Token生成与管理:认证服务器需要使用安全的算法生成Token,常见的算法有JWT(JSON Web Token),JWT由三部分组成:头部(包含算法等信息)、载荷(包含用户身份等数据)和签名(用于验证Token的完整性),需要设置Token的过期时间,以确保安全性。
图片来源于网络,如有侵权联系删除
Token验证:目标应用在接收到Token后,需要有验证机制,如果使用JWT,可以通过验证签名来确保Token没有被篡改,还需要检查Token是否过期,以及根据载荷中的用户身份信息进行权限判断等操作。
三、基于SAML(安全断言标记语言)的单点登录
1、原理
- SAML是一种基于XML的开放标准,用于在不同的安全域之间交换认证和授权数据,在单点登录场景中,有三个主要角色:用户、身份提供者(IdP)和服务提供者(SP),当用户尝试访问SP时,SP会将用户重定向到IdP进行登录,IdP验证用户身份后,会生成一个包含用户身份信息的SAML断言,并将用户重定向回SP,SP接收到SAML断言后,解析其中的信息,确定用户身份,从而实现单点登录。
- 在高校中,学校的身份认证中心作为IdP,各个学院的教学管理系统、科研管理系统等作为SP,学生访问教学管理系统时,会被重定向到身份认证中心登录,登录成功后,身份认证中心将包含学生身份信息的SAML断言发送给教学管理系统,实现单点登录。
2、实现要点
SAML断言的生成与解析:IdP需要根据用户的登录状态和身份信息生成合法的SAML断言,这个断言需要遵循SAML的规范,包含必要的元素,如用户主体标识、颁发者标识、有效期等,SP则需要有能力解析SAML断言,提取出用户身份信息。
元数据交换:IdP和SP之间需要交换元数据,元数据包含了双方的标识、支持的协议、加密算法等信息,通过元数据交换,双方能够正确地进行通信和交互SAML断言。
基于OAuth/OIDC的单点登录
1、原理(OAuth2.0)
- OAuth2.0主要用于授权,它允许用户在不暴露密码的情况下授权第三方应用访问其资源,在单点登录场景下,用户登录到一个授权服务器(可以看作是身份提供者),授权服务器会颁发一个访问令牌(access token),当用户访问其他应用(资源服务器)时,资源服务器会验证这个访问令牌的有效性,如果有效,就允许用户访问资源,实现单点登录的效果。
图片来源于网络,如有侵权联系删除
- 以社交媒体平台为例,用户登录到平台(授权服务器),平台颁发访问令牌,当用户使用该平台账号登录第三方游戏应用(资源服务器)时,游戏应用验证访问令牌,从而实现单点登录。
2、原理(OIDC - OpenID Connect)
- OIDC是建立在OAuth2.0之上的身份验证层,它在OAuth2.0的基础上增加了身份验证的功能,用户登录到OpenID Provider(OP)后,OP会返回一个ID令牌(ID Token),这个ID令牌包含了用户的身份信息,当用户访问其他应用(称为Relying Party - RP)时,RP验证ID令牌的有效性,从而实现单点登录。
3、实现要点(OAuth/OIDC)
授权流程管理:对于OAuth2.0,需要正确实现授权码模式、隐式模式等不同的授权流程,在授权过程中,要确保客户端的合法性验证、用户同意等环节的正确性,对于OIDC,要正确处理ID令牌的生成、验证,包括验证签名、检查令牌中的用户身份信息等。
安全考虑:无论是OAuth2.0还是OIDC,都需要注意保护访问令牌和ID令牌的安全性,防止令牌被窃取、重放等攻击,可以通过使用安全的传输协议(如HTTPS)、设置合理的令牌有效期等措施来提高安全性。
单点登录的实现方式各有特点,企业或组织需要根据自身的需求、技术架构和安全要求等因素来选择合适的单点登录实现方式。
评论列表