基本概念:Single Sign On 简称SSO,目前比较流行的企业业务整合的解决方案之一,是指在多系统应用群中登陆一个系统,即可在其余全部系统中获得受权而无需再次登陆,包括单点登陆与单点注销两部分。php
为了实现单点登陆,就须要在多个Server上达到验证同一个ID的效果,我所知道的有两种方法能够达成这个目的。以前的一种方法是“共享Cookie”,让各个Server共用一个session信息,让客户端在各个域名下都能持有这个ID,从而检验处ID的有效性,获得ID对应的用户信息。用户登陆成功拿到session-id后分享到其余域名下,把session-id放入Cookie中,把他们的Cookie域设置成顶级域名,这样全部的子域都可以读取到Cookie里的session-id,好比谷歌公司,google.com是他的顶级域名,邮箱服务的mail.google.com和地图服务map.google.com都是他的子域(这种方式的实现就是共享Cookie)。java
可是咱们会发现,共享Cookie的方式存在着许多的局限性,首先,应用群的域名须要统一,其次,应用群各系统使用的技术(至少是web服务器)要相同,否则Cookie的Key值不一样,没法维持会话,而且共享Cookie没法实现跨语言技术平台登陆,好比java、.net、php之间,还有一点,就是Cookie自己并不安全。web
这个时候就出现了另外一种实现方式就是单点登陆,生成一种在整个Server群惟一的标识SSO-Token(受权令牌),全部Server群都可以验证这个token,同时拿到token背后表明的用户信息。相比于单系统登陆,sso须要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其余系统不提供登陆入口,只接受认证中心的间接受权。间接受权经过令牌实现,sso认证中心验证用户的用户名密码没问题,建立受权令牌,在接下来的跳转过程当中,受权令牌做为参数发送给各个子系统,子系统拿到令牌,即获得了受权,能够借此建立局部会话,局部会话登陆方式与单系统的登陆方式相同。这个过程,也就是单点登陆的原理。简单步骤以下:安全
用户登陆成功以后,会与sso认证中心及各个子系统创建会话,用户与sso认证中心创建的会话称为全局会话,用户与各个子系统创建的会话称为局部会话,局部会话创建以后,用户访问子系统受保护资源将再也不经过sso认证中心,全局会话与局部会话有以下约束关系:服务器
咱们能够经过博客园、百度、csdn、淘宝等网站的登陆过程加深对单点登陆的理解,注意观察登陆过程当中的跳转url与参数session
单点登陆天然也要单点注销,在一个子系统中注销,全部子系统的会话都将被销毁。简单步骤以下:网站