以CAS为例,使用Cookie实现单点登录的原理图如图1所示。
l首先,单点登录分为“服务端”和“客户端”。服务端就是单点登录服务器,而客户端通常是“函数库”或者“插件”。需要使用单点登录的应用程序,需要把客户端插件安装到自己的系统中,或者将客户端函数库包括在代码中。单点登录的客户端通常替换了原来应用程序的认证部分的代码。
l某个应用程序首先要发起第1次认证。大部分情况下,应用程序中嵌入的客户端会把应用程序原来的登录画面屏蔽掉,而直接转到单点登录服务器的登录页面。
图1使用Cookie实现单点登录的原理图
l用户在单点登录服务器的登录页面中,输入用户名和密码。
l然后单点登录服务器会对用户名和密码进行认证。认证本身并不是单点登录服务器的功能,因此,通常会引入某种认证机制。认证机制可以有很多种,例如自己写一个认证程序,或者使用一些标准的认证方法,例如LDAP或者等等。在大多数情况下,会使用LDAP进行认证。这是因为LDAP在处理用户登录方面,有很多独特的优势,这在本文的后面还会比较详细地进行介绍。
l认证通过之后,单点登录服务器会和应用程序进行一个比较复杂的交互,这通常是某种授权机制。CAS使用的是所谓的Ticket。具体这点后面还会介绍。
l授权完成后,CAS把页面重定向,回到Web应用。Web应用此时就完成了成功的登录(当然这也是单点登录的客户端,根据返回的Ticket信息进行判断成功的)。
l然后单点登录服务器会在客户端创建一个Cookie。注意,是在用户的客户端,而不是服务端创建一个Cookie。这个Cookie是一个加密的Cookie,其中保存了用户登录的信息。
l如果用户此时希望进入其他Web应用程序,则安装在这些应用程序中的单点登录客户端,首先仍然会重定向到CAS服务器。不过此时CAS服务器不再要求用户输入用户名和密码,而是首先自动寻找Cookie,根据Cookie中保存的信息,进行登录。登录之后,CAS重定向回到用户的应用程序。
这样,就不再需要用户继续输入用户名和密码,从而实现了单点登录。
注意,这种单点登录体系中,并没有通过http进行密码的传递(但是有用户名的传递),因此是十分安全的。
1.3单点登录、统一用户和单一用户管理
很谈论单点登录时,常常和统一用户,以及单一用户管理混淆了,要么误认为单点登录自然实现了单一用户管理;要么误认为统一用户或者单一用户管理就是单点登录。实际上,这三个概念是有明确的区别的。
统一用户就是指不同的系统,使用同一套用户处理的机制。
l用户ID全局惟一,用户登录名,密码全局唯一,并且统一存储在单一系统中。
l用户的一些属性,如姓名、电话、地址、邮件等,统一存储在单一系统中。尽管各应用系统还可以自行增加一些属性,但是基本的属性应该统一存储和管理。
l应用系统不应该直接对用户信息的进行增加、修改和删除,但是可以进行查询。对用户信息的增加、修改和删除,应该由专门的系统进行统一的管理。
目前比较标准的做法,是使用LDAP服务器,对用户信息进行统一管理。
很显然,统一用户是单点登录的基础,但是统一用户并不意味着实现了单点登录。
例如,如果我们在LDAP服务器中实现了用户的统一管理。然后我们可以设置应用程序A和B都使用LDAP进行用户认证。虽然此时A和B用以认证的用户,其用户名和密码都是一样的(都是从LDAP服务器中读出的),但是对应用A进行了登录之后,应用B还需要再次输入用户名和密码。因此,统一用户并不意味着单点登录。
在图1中可以很清楚地看到,用于统一用户管理的LDAP服务器,只是单点登录系统中的一个部分,主要用于认证。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29948-2.html
你穿的鞋
天下唯你马头是大
怎么下载啊