一、单点登录介绍
单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
二、原理
单点登录的核心原理是“信任传递”。当用户首次访问某个网站时,需要进行身份验证。一旦用户通过身份验证,服务器会生成一个令牌,并将该令牌返回给用户。用户携带此令牌访问其他授权的网站时,可以将令牌传递给这些网站,从而跳过重复的身份验证过程。
三、实现方式
实现方式一:父域 Cookie
此种实现方式比较简单,但不支持跨主域名。
实现方式二:认证中心(推荐使用)
此种实现方式相对复杂,支持跨域,扩展性好
- 我们可以部署一个认证中心,认证中心就是一个专门负责处理登录请求的独立的服务。
- 用户统一在认证中心进行登录,登录成功后,认证中心记录用户的登录状态,并将 Token 写入 Cookie。(注意这个 Cookie 是认证中心的,应用系统是访问不到的。)
- 应用系统检查当前请求有没有 Token,如果没有,说明用户在当前系统中尚未登录,那么就将页面跳转至认证中心。由于这个操作会将认证中心的 Cookie 自动带过去,因此,认证中心能够根据 Cookie 知道用户是否已经登录过了。
- 如果认证中心发现用户尚未登录,则返回登录页面,等待用户登录,如果发现用户已经登录过了,就不会让用户再次登录了,而是会跳转回目标 URL ,并在跳转前生成一个 Token,拼接在目标 URL 的后面,回传给目标应用系统。
- 应用系统拿到 Token 之后,还需要向认证中心确认下 Token 的合法性,防止用户伪造。确认无误后,应用系统记录用户的登录状态,并将 Token 写入 Cookie,然后给本次访问放行。(注意这个 Cookie 是当前应用系统的,其他应用系统是访问不到的。)当用户再次访问当前应用系统时,就会自动带上这个 Token,应用系统验证 Token 发现用户已登录,于是就不会有认证中心什么事了。
实现方式三:LocalStorage 跨域
此种实现方式完全由前端控制,几乎不需要后端参与,同样支持跨域。
四、单点登录的优缺点
优点
- 用户体验的提升
- 简化管理和维护
- 降低密码管理的复杂性
- 促进统一标识管理
- 能够提高系统安全性
缺点
- 安全隐患,因为只需要登录一次,所有的授权的应用系统都可以访问,可能导致一些很重要的信息泄露。
- 不利于重构
参考文章