单点登陆原理和实现

什么是单点登陆

单点登陆SSO(Single Sign On),是目前经常使用的企业业务整合的解决方案之一。简单的说,就是在一个存在多个系统的环境下,用户在一处登陆以后,就不用在其余系统中再次进行登陆,登陆一次,就能够取得该环境下其余全部系统的信任。html

为何要用单点登陆

在较大的公司内部,通常都有不少的业务支持系统为其提供相应的管理和IT服 务,这些不一样的系统每每是在不一样的时期建设起来 的,运行在不一样的平台上;也许是由不一样厂商开发,使用了各类不一样的技术和标准。
随 着企业的发展,业务系统的数量在不断的增长,老的系统却不能轻易的替换,这会带来不少的开销。其一是管理上的开销,须要维护的系统愈来愈多。
不少系统的数 据是相互冗余和重复的,数据的不一致性会给管理工做带来很大的压力。
业务和业务之间的相关性也愈来愈大,例如公司的计费系统和财务系统,财务系统和人事系 统之间都不可避免的有着密切的关系。
为了下降管理的消耗,最大限度的重用已有投资的系统,不少企业都在进行着企业应用集成(EAI)。web

企业应用集成能够在不一样层面上进行:
例如:数据库

  • 在数据存储层面上的“数据大集中”,
  • 在传输层面上的“通用数据交换平台”,
  • 在应用层面上的“业务流程整合”,
  • 和用 户界面上的“通用企业门户”等等。

事实上,还用一个层面上的集成变得愈来愈重要,那就是“身份认证”的整合,也就是“单点登陆”。跨域

单点登陆的运行机制

一个简单的运行机制

某公园中有许多独立的景点,游客能够在每一个景点门口进行买票进入。对于须要游玩的游客来讲,这种方式很不舒服,在每一个景点都须要排队购票,不只时间繁琐,钱包频繁的掏进掏出,很不安全。
因而不少游客在公园买了一张通票(套票),这样在进入景点时只须要出示一下这张票就能够进入而不须要重复购买景点门票。
单点登陆的机制也是这样的。
在这里插入图片描述
当用户登陆应用系统1的时候,由于这个时候用户尚未登陆,因此被引入到认证系统进行登陆操做(1)。
当用户登陆成功后,认证系统返回给用户一个认证凭证—ticket(2)。
当用户在去访问其余应用系统时(3, 5),会将这个认证凭证ticket带上,做为本身认证的凭据,应用系统接受到请求以后会把ticket送到认证系统进行效验,检查ticket的合法性(4,6).
若是经过效验,用户就能够在不用再次登陆的状况下访问应用系统2和应用系统3了。安全

稍微复杂的运行机制

从上面的视图咱们能够看出要实现SSO,须要有如下功能:服务器

  • 统一的认证系统。全部应用系统共享一个认证系统,认证系统的主要功能是将用户的登陆信息和用户信息库进行比对,对用户进行登陆认证,并将登陆成功产生的凭证ticket返回给用户。
  • 认证系统可以对用户带的ticket校检,判断其有效性。而且全部的应用系统须要可以识别和提取ticket信息。
  • 应用系统可以对ticket进行识别和校检,经过和认证系统的通信,自动判断当前用户是否登陆,从而完成单点登陆功能。
    这里须要注意的是:
    单一的用户信息数据库并非必须的,实际上,只要统一认证系统,统一ticket的产生和校检,不管用户信息存放在哪里都能实现单点登陆。
    统一的认证系统并不意味着只有单个认证服务器,认证服务器之间要经过标准的通信协议,互相交换认证信息,就能完成更高级别的单点登陆。
    在这里插入图片描述

单点登陆实现原理

sso须要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其余系统不提供登陆入口,只接受认证中心的间接受权。间接受权经过令牌实现,sso认证中心验证用户的用户名密码没问题,建立受权令牌,在接下来的跳转过程当中,受权令牌做为参数发送给各个子系统,子系统拿到令牌,即获得了受权,能够借此建立局部会话,局部会话登陆方式与单系统的登陆方式相同。这个过程,也就是单点登陆的原理,用下图说明:
在这里插入图片描述
对上图的描述:
用户没有登陆时svg

  1. 用户访问系统1的保护资源时,系统1检测到用户尚未进行登陆,将会将请求跳转至认证中心系统,认证中心检测用户确实没有登陆,那么跳转至登陆页面。
  2. 用户在登陆页面提交本身的认证信息给认证中心,认证中心校检用户的信息,若是用户信息正确,将会建立与该用户的全局会话(若是全局会话过时,那么用户将要从新登陆,在全局会话中可能将生成的令牌,用户我的信息,登陆状况等信息存储在全局会话中)。
  3. 认证中心将带着建立的令牌跳转回最初的请求地址(系统1),系统1得到令牌后会去认证中心校检该令牌是否有效,若是有效,则进行下一步。
  4. 系统1使用该令牌建立与用户的会话,称为局部会话,返回受保护资源(若是局部会话过时,系统1会请求认证中心,认证中心发现该用户已经登陆,执行步骤3)

用户已登陆状况下.net

  1. 用户访问系统2,系统二发现该用户没有登陆,跳转至认证中心,并将本身的地址做为参数。
  2. 认证中心发现该用户已经登陆,跳转回系统2的地址,并附带上令牌,系统2拿到令牌后去认证中心校检该令牌是否有效。认证中心返回该令牌有效,注册系统2,系统2使用该令牌建立局部会话,返回受保护资源。

用户登陆成功以后,会与认证中心及各个子系统创建会话,用户与认证中心创建的会话称为全局会话,用户与各个子系统创建的会话称为局部会话,局部会话创建以后,用户访问子系统受保护资源将再也不经过认证中心,全局会话与局部会话有以下约束关系:设计

  • 局部会话存在,全局会话必定存在
  • 全局会话存在,局部会话不必定存在
  • 全局会话销毁,局部会话必须销毁

令牌设计能够参考:基于跨域单点登陆令牌的设计与实现代理

单点登陆中用户认证策略

1. 基于访问票据的认证策略

也就是咱们上面一直说的ticket。其核心思想是在认证服务器和应用系统之间创建信任关系,主要采用访问票据(简称Ticket)模型维持这种信任关系。用户成功登陆统一认证服务器后,便得到一个ticket凭证,该凭证是用户访问服务器所辖全部应用系统的通行证。目前比较流行的SSO解决方案如Kerberos、Liberty Alliance、Microsoft Passport都是基于访问票据的认证策略。

2. 基于Web请求代理的认证策略

基本思想是经过统一的门户服务器来代理用户的Web请求,门户服务器统一处理用户的身份认证。基于此策略,当用户访问应用系统时,全部的Web请求首先被定向到门户服务器,门户服务器完成用户身份认证,而后把Web请求转向应用系统,并附加上用户身份信息。网页过滤器技术是Web请求重定向主要实现方式。
与基于访问票据的认证思想相似,基于Web请求代理的认证策略也必须创建门户服务器与应用系统之间的信任关系。但基于Web请求代理的认证策略实现机制简洁,结构灵活,对原有Web应用的改造较少。

3. 基于密码代理的认证策略

门户服务器并不控制应用系统的用户认证,只是保管应用系统的用户帐户信息,即代理保管用户在应用系统中的用户名和密码,用户在门户服务器经过认证以后,进入应用系统时,门户服务器自动完成应用系统登陆。这种策略不用改变原有应用系统,适合于基于界面的集成方式,其实现机制更加灵活简易,成本更低。

单点注销

在一个子系统中注销,那么全部子系统的的会话都会被销毁。
在这里插入图片描述
用户向系统1提出注销请求,系统1根据用户与系统1创建的会话id从会话中拿到令牌,向认证中心发起注销请求。
认证中心校检该令牌有效,而后销毁全局会话,同时取出此令牌注册的系统地址。认证中心向全部注册系统发出注销请求,各系统收到注销请求后销毁局部会话,认证中心引导用户跳转值登陆页面。

本文参考

单点登陆原理与简单实现
单点登陆技术浅析
单点登陆的原理

相关文章
相关标签/搜索