API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工做机制的细节。数据库
一、什么是单点登录
单点登陆(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只须要登陆一次就能够访问全部相互信任的应用系统。
二、单点登陆带来的好处(表示第一遍看不懂)
使用“单点登陆”整合后,只须要登陆一次就能够进入多个系统,而不须要从新登陆,这不只仅带来了更好的用户体验,更重要的是下降了安全的风险和管理的消耗。请看下面的统计数据:
- 提升 IT 效率:对于每 1000 个受管用户,每用户可节省$70K
- 帮助台呼叫减小至少1/3,对于 10K 员工的公司,每一年能够节省每用户 $75,或者合计 $648K
- 生产力提升:每一个新员工可节省 $1K,每一个老员工可节省 $350 资料来源:Giga
- ROI 回报:7.5 到 13 个月 资料来源:Gartner
另外,使用“单点登陆”仍是SOA时代的需求之一。
在面向服务的架构中,服务和服务之间,程序和程序之间的通信大量存在,服务之间的安全认证是SOA应用的难点之一,应此创建“单点登陆”的系统体系可以大大简化SOA的安全问题,提升服务之间的合做效率。
2、单点登陆的运行原理
一、一个简单的运行机制
单点登陆的机制实际上是比较简单的,用一个现实中的例子作比较。
某公园内部有许多独立的景点,游客能够在各个景点门口单独买票。
对于须要游玩全部的景点的游客,这种买票方式很不方便,须要在每一个景点门口排队买票,钱包拿 进拿出的,容易丢失,很不安全。
因而绝大多数游客选择在大门口买一张通票(也叫套票),就能够玩遍全部的景点而不须要从新再买票。
他们只须要在每一个景点门 口出示一下刚才买的套票就可以被容许进入每一个独立的景点。编程
单点登陆的机制也同样,以下图所示,安全

当用户第一次访问应用系统1的时候,由于尚未登陆,会被引导到认证系统中进行登陆(1);服务器
根据用户提供的登陆信息,认证系统进行身份效验,若是经过效验,应该返回给用户一个认证的凭据--ticket(2);架构
用户再访问别的应用的时候(3,5)就会将这个ticket带上,做为本身认证的凭据,应用系统接受到请求以后会把ticket送到认证系统进行效验,检查ticket的合法性(4,6)。函数
若是经过效验,用户就能够在不用再次登陆的状况下访问应用系统2和应用系统3了。3d
二、稍微复杂一点的运行机制
从上面的视图能够看出,要实现SSO,须要如下主要的功能:blog
- 全部应用系统共享一个身份认证系统。统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登陆信息和用户信息库相比较,对用户进行登陆认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。
- 另外,认证系统还应该对ticket进行效验,判断其有效性。全部应用系统可以识别和提取ticket信息,要实现SSO的功能,让用户只登陆一次,就必须让应用系统可以识别已经登陆过的用户。
- 应用系统应该能对ticket进行识别和提取,经过与认证系统的通信,能自动判断当前用户是否登陆过,从而完成单点登陆的功能。
上面的功能只是一个很是简单的SSO架构,在现实状况下的SSO有着更加复杂的结构。有两点须要指出的是:接口
- 单一的用户信息数据库并非必须的,有许多系统不能将全部的用户信息都集中存储,应该容许用户信息放置在不一样的存储中。事实上,只要统一认证系统,统一ticket的产生和校验,不管用户信息存储在什么地方,都能实现单点登陆。

- 统一的认证系统并非说只有单个的认证服务器,以下图所示,整个系统能够存在两个以上的认证服务器,这些服务器甚至能够是不一样的产品。认证服务器之间要经过标准的通信协议,互相交换认证信息,就能完成更高级别的单点登陆。以下图,当用户在访问应用系统1时,由第一个认证服务器进行认证后,获得由此服务器产生的ticket。当他访问应用系统4的时候,认证服务器2可以识别此ticket是由第一个服务器产生的,经过认证服务器之间标准的通信协议(例如SAML)来交换认证信息,仍然可以完成SSO的功能。
