单点登陆全称Single Sign On(如下简称SSO),是指在多系统应用群中登陆一个系统,即可在其余全部系统中获得受权而无需再次登陆,包括单点登陆与单点注销两部分。SSO是目前比较流行的企业业务整合的解决方案之一。浏览器
相比于单系统登陆,sso须要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其余系统不提供登陆入口,只接受认证中心的间接受权。间接受权经过令牌实现,sso认证中心验证用户的用户名密码没问题,建立受权令牌,在接下来的跳转过程当中,受权令牌做为参数发送给各个子系统,子系统拿到令牌,即获得了受权,能够借此建立局部会话,局部会话登陆方式与单系统的登陆方式相同。这个过程,也就是单点登陆的原理。安全
server端以server群如何生成、验证ID的方式大体分为两种: “共享Cookie”这个就是上面提到的共享session的方式,我倒以为叫“共享session”来得好一点,本质上cookie只是存储session-id的介质,session-id也能够放在每一次请求的url里。听说这种方式不安全,我没去细究,哪位大神能够推荐下相关的资料,我后期补上。其实也是,毕竟session这项机制一开始就是一个server一个session的,把session拿出来让全部server共享确实有点奇怪。SSO-Token方式由于共享session的方式不安全,因此咱们再也不以session-id做为身份的标识。咱们另外生成一种标识,把它取名SSO-Token(或Ticket),这种标识是整个server群惟一的,而且全部server群都能验证这个token,同时能拿到token背后表明的用户的信息。咱们要讨论的也是这种方式,一会上具体流程图。cookie
浏览器端单点登陆还有很是关键的一步,这一步跟server端验证token的方式无关,用最先的“共享session”的方式仍是如今的“token”方式,身份标识到了浏览器端都要面临这样的一个问题:用户登陆成功拿到token(或者是session-id)后怎么让浏览器存储和分享到其它域名下?同域名很简单,把token存在cookie里,把cookie的路径设置成顶级域名下,这样全部子域都能读取cookie中的token。这就是共享cookie的方式(这才叫共享Cookie嘛,上面那个应该叫共享session)。session
单点登录的有优势提升用户的效率。提升开发人员的效率和简化管理。同时也有不利于重构的缺点url