单点登录(Single Sign On,简称 SSO)简单来说就是用户只需在一处登录,不用在其他多系统环境下重复登录。用户的一次登录就能得到其他所有系统的信任。
为什么需要单点登录
单点登录在大型网站应用频繁,比如阿里旗下有淘宝、天猫等,用户的一次操作或交易就可能涉及到其他众多子系统的协作。使用单点登录就可以让用户登录一次,免去频繁登录授权的苦恼。
早期的单系统登录
用户在登录界面输入自己的用户名和密码之后,浏览器向服务器发送登录请求,服务器验证通过用户信息后放入 session,并将 sessionId 放入 Cookie,随后返回给浏览器。登录过后的请求都将在 Cookie 中携带 sessionId,服务器通过 sessionId 获取用户信息,最后返回响应信息。
单点登录的实现方式
如果一处登录的 session 能够共享,那么多个应用系统之间的登录状态也可以共享了。所以单点登录的关键在于,如何让 sessionId (或 Token)在多个域中共享。
同域下的单点登录
一个企业一般情况下只有一个域名,子系统使用二级域名。比如百度搜索是一级域名:https://www.baidu.com,贴吧使用的是二级域名https://tieba.baidu.com。如果我们要实现单点登录,可以将 Cookie 的域设置为顶域,即 https://www.baidu.com,这样其余的子域系统都可以访问顶域的 Cookie 了。
当然,上面做法缺点也很明显,它不支持跨域。这还不是真正的单点登录。
不同域下的单点登录
要实现不同域下的单点登录, 我们需要一个 SSO 认证中心来专门处理登录请求。所有的请求(登录、退出、获取用户信息、当前用户状态)都请求 SSO 系统,SSO 系统维护用户信息。流程如下:
首次登录时:
- 用户登录某应用网站,浏览器将用户的登录重定向到 SSO 认证中心
- SSO 进行检查和校验是否有现有的 SSO Cookie
- 由于首次登录,并且用户浏览器不存在 SSO Cookie,因此请求用户使用 SSO 配置的连接登录。
- 用户登录后,将设置 SSO Cookie,用户将被重定向到应用程序,并使用包含用户相关的身份信息的令牌(Token)
后续登录中:
-
应用网站将用户重定向到 SSO 认证中心
-
SSO 认证中心 检查是否存在现有的 SSO Cookie
-
SSO 认证中心验证 SSO Cookie 是否有效
-
无效,用户被重定向到应用网站的登录页面
-
有效,用户将被重定向到应用程序,并带有包含用户相关身份信息的令牌(Token)。
-
其实,SSO 认证中心相当于一个登录中介,它统一管理用户在多系统下的登录操作。
-
使用 SSO 的好处就是简化登录流程,用户友好且安全。
在多系统下的登录操作。
使用 SSO 的好处就是简化登录流程,用户友好且安全。