单点登录(SSO)服务

来源:互联网 发布:adobe cc2018 mac破解 编辑:程序博客网 时间:2024/04/27 07:08

单点登录(SSO)服务
  单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。

单点登陆的技术实现机制

当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。

要实现SSO,需要以下主要的功能:

1、所有应用系统共享一个身份认证系统。

统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。

2、所有应用系统能够识别和提取ticket信息

要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。

另外:

1、单一的用户信息数据库并不是必须的,有许多系统不能将所有的用户信息都集中存储,应该允许用户信息放置在不同的存储中,如下图所示。事实上,只要统一认证系统,统一ticket的产生和效验,无论用户信息存储在什么地方,都能实现单点登录。

2、统一的认证系统并不是说只有单个的认证服务器

认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。如:当用户在访问应用系统1时,由第一个认证服务器进行认证后,得到由此服务器产生的ticket。当他访问应用系统2的时候,认证服务器2能够识别此ticket是由第一个服务器产生的,通过认证服务器之间标准的通讯协议(例如SAML)来交换认证信息,仍然能够完成SSO的功能。

WEB-SSO的实现

用户在访问页面1的时候进行了登录,但是客户端的每个请求都是单独的连接,当客户再次访问页面2的时候,如何才能告诉Web服务器,客户刚才已经登录过了呢?浏览器和服务器之间有约定:通过使用cookie技术来维护应用的状态。Cookie是可以被Web服务器设置的字符串,并且可以保存在浏览器中。当浏览器访问了页面1时,web服务器设置了一个 cookie,并将这个cookie和页面1一起返回给浏览器,浏览器接到cookie之后,就会保存起来,在它访问页面2的时候会把这个cookie也带上,Web服务器接到请求时也能读出cookie的值,根据cookie值的内容就可以判断和恢复一些用户的信息状态。Web-SSO完全可以利用 Cookie结束来完成用户登录信息的保存,将浏览器中的Cookie和上文中的Ticket结合起来,完成SSO的功能。

为了完成一个简单的SSO的功能,需要两个部分的合作:

1、统一的身份认证服务。

2、修改Web应用,使得每个应用都通过这个统一的认证服务来进行身份效验。

单点登陆的要求:

1、需要整个大系统中将用户资料管理和密码管理作为一个独立的模块来进行开发和维护。

2、各个子系统都采用这个模块来进行用户资料管理和密码管理。

单点登陆的好处:

1、用户信息的一致性。

对于保证整个系统的用户信息的一致性有非常重要作用和好处,同时,方便了以后其整个系统的维护,升级。

2、用户操作的方便性。

他对于用户在系统在各个子系统中来回自由切换非常方便和有利的,方便了用户的操作。

3、方便了系统的安全模块升级和维护。

由于单点登陆是作为一个相对独立的模块开发和维护的,所以,方便了这个模块的开发和维护。

可以实现单点登陆的几种方法

(1)基于domain的方案

这种方案是我公司目前使用的一种方案,原理:应用A在a.domain.com,B在b.domain.com,如果设cookie的时候,设 domain为domain.com,那在A、B上都可以访问到这个cookie了。(cookie的domain、path、port、 version、secure相同)。

该方案特点:

1、不能够跨域

2、在网络中传送用户名和密码

3、只支持J2EE应用

(2)基于gateway的方案

实际部署的时候,对所有应用的请求,都要通过一个gateway转发一下,比如用一个L4的交换机顶在前面。

(3)基于tooken传递的方案

主要是以耶鲁大学的CAS项目为基础。

注意:你自己的应用看不到用户的密码。由CAS执行授权,只有CAS能看到用户的密码。这样增加发安全性,因为用户名和密码不会通过网络在应用间传播。

下面是使用CAS整合的单点登录用例

用例一:

一台认证服务器(假定为AUTH),有两个应用A、B,分别部署在不同的服务器上。

1) 用户访问A,A应用无法找到用户的身份信息,使用redirect方法将用户引导至http://Auth/login?service=http://A/path。

2) AUTH 显示登录界面,用户输入登录信息,认证通过。

3) AUTH产生一个cookie(这个cookie只有AUTH上才能读到),使用redirect方法将用户引导回http://A/path?token=xxxxx(在有的解决方案上,这个token是通过一定编码算法的Account信息)

4) A读取token=xxxx的信息,获取用户身份。

5) 用户访问B。B未找到用户的身份信息,redirect至http://AUTH/login?service=http://B/path

6) AUTH读cookie获取用户身份,然后redirect回http://B/path?token=xxxx

7) B读取token=xxxx信息,获得用户身份信息

用例二:

用户访问一个Web应用的过程。

 

 

 


具体的参看 http://www.9ta8.com/YaleCASServer.mht

(4)USBKey登录

这个方案是北京点聚信息技术有限公司提供的,我也向他们的技术咨询了相关的问题。他们的实现方式基本上是这样的:每个使用该系统的用户都有一个USBKey证书,在登陆系统的时候把这个证书插在计算机上。每一个网站都要通过这个证书去认证。

这样每个登录用户只需插上USBKey即可进入任意受信任系统,当然访问USBKey首先需要密码校验。

 个人认为单点登陆实际上就两种方案

首先确认要使用单点登陆,必须有一个核心,那就是不管用户走到那个平台,他必须要带着他的通行证,单点登陆最关键的问题是用户怎么取得、保存、使用这个通行证的问题。 用户要取得他的通行证其实不外乎以下两种方案:

第一种:所有的业务平台集成在一个Portal上,去每一个平台的时候都要带着他的“通行证”,这就是所谓的“Tooken传递方案”;

第二种:使用硬件卡,就是上面所说的“USBKey登陆”;

单点登陆的几个案例

(1)微软一篇关于单点登陆的文章,他的实现是使用第一种方案。

原文:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/singlesignon.asp

(2)点聚公司的产品,可以看看他们的介绍

http://www.dianju.com.cn/sso.htm

(3)SharePoint Portal Server 2003 中的单一登录

http://www.microsoft.com/china/technet/prodtechnol/sppt/reskit/c2661881x.mspx

(4)《WebCast SharePoint Portal Server 2003 Single Sign On 管理及开发》已提供下载

http://www.msotec.net/Forums/ShowThread.aspx?PostID=415

(5)北京大学信息平台下的统一用户管理和身份认证

http://www.9ta8.com/download.htm

(6)统一身份认证在校园信息化中的应用

http://www.9ta8.com/download.htm

我想达到的目的
在不使用硬件卡、Passport和Cookie的情况下我想达到的目的:当用户打开浏览器进入站点A后,登陆,浏览A站点的内容;浏览完毕后用户想进入B站点,然后就在浏览器的地址栏中输入了B站点的地址,这时进入B站点后也不用重新登陆;同样,当用户关闭了浏览器后又想进入C站点,但同样不需要登陆。这个问题考虑了很长时间了,敬请大家指点迷津

0 0
原创粉丝点击