基于UCenter的单点登录系统的设计与实现
2015-08-15王蕾
王 蕾
(山东工商学院网络中心,山东 烟台 264005)
随着高校数字化校园建设的不断发展,高校各个部门建设了各自需要的应用系统,由于没有统一的规划和设计,各应用系统直接没有联系,各自为营,每个系统都有一套帐号密码,用户将不得不按照各个应用系统的要求分别登录进入相应的系统,这不仅需要多个系统管理员维护管理各个应用系统的用户信息库,并且用户需要记忆多个帐户和口令,使用极为不便,容易混淆,同时具有很大的安全隐患。单点登录技术(single sign on,SSO)在数字化校园信息集成中成为关键技术,用户只需一次身份验证,就可对所有被授权的应用系统或资源进行无缝的访问,从而提高工作效率,降低操作成本,提高系统的整体安全性,而且还能为进一步的应用系统集成奠定基础,对高校的信息化建设和发展具有十分重要的意义。
1 单点登录技术研究现状
国内单点登录技术研究主要集中在高校和企业,清华大学、北京大学、上海交通大学和华南理工大学都实现了自己的单点登录系统,这些系统不是很成熟,都没有公开共享。企业有吉大正元的JITSSO系统和神舟融信开发的UTrust SSO系统,这些系统都是商业化解决方案,可以购买使用。国内企业如提供数字化校园解决方案都实现了单点登录系统,如果北京希尔、沈阳东软、广州联奕统和金智教育,这些系统解决方法都是在Yale-CAS单点登录技术基础上修改完善实现的。
国外成熟的单点登录解决方案中主要有:基于Psssport协议的单点登录解决方案、基于SAML协议的单点登录解决方案和基于Yale-CAS协议的单点登录解决方案。其中微软公司的基于Psssport协议的解决方案是基于.NET语言开发的,只能在Windows服务器上使用。基于SAML协议的单点登录解决方案通过XML规范传输数据,数据流较大时,网络开销比较大。Yale-CAS单点登录解决方案由于其体系结构设计合理、开源、配置简单和客户端支持广泛等优点而得到广泛应用。
2 UCenter单点登录相关技术和机制分析
UCenter中文意思就是“用户中心”,是北京康盛新创科技有限责任公司的一款开源的一站式登录解决方案,基于php开发,拥有完善的接口,通过修改可以挂接不同架构第三方web应用,实现单点登录。
2.1 p3p协议
P3P(Platform for Privacy Preferences(隐私设定平台规范)是万维网联盟(W3C)公布的一项隐私保护推荐标准,旨在为网上冲浪的Internet用户提供隐私保护。P3P通过匹配网站的隐私策略(PrivacyPolicy)和用户浏览器的隐私偏好(PrivacyPreference)来决定是否允许将用户的隐私数据提供给网站使用,如果匹配良好,则向网站提供用户隐私数据,如不能完全匹配,提示用户进行处理。从技术上看,P3P包括了两个组件:一个放在服务器端;另外一个放在客户端,形成一个用户代理。当用户登陆网站的时候,服务器端的组件根据网站的要求,会自动生成XML语言形式的用户个人处理策略,这就像是贴在商店橱窗外的公众告示,而客户端的组件就将这个“公众告示”提供给用户。
2.2 Cookie文件
Cookie是用户访问过的网站存放在用户硬盘驱动器上的小数据文件,可使服务提供者在下次访问时确认用户的身份,并能够用来追踪用户浏览器轨迹,以此分析用户的兴趣爱好。Cookie由服务器端生成,通过http协议的User-Agent字段发送,浏览器会将接收到Cookie保存到某个目录下的文本文件内,下次访问该网站时自动发送该Cookie给网站。正常的Cookie只能在一个应用中共享,即一个Cookie只能由创建它的应用获得,不能跨域设置,但是单点登录涉及的系统都是多应用、多域名的,能够通过p3p协议跨域设置Cookie。
2.3 跨域设置Cookie
网站程序只需要设置P3P HTTP Header,跨域设置Cookie就可以成功。
asp.net设置p3p的方法:HttpContext.Current.Response.AddHeader("p3p","CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"")。
php设置p3p的方法:header('P3P:CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"')。
java设置 p3p的方法:response.addHeader("P3P","CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"")。
这些标签就是P3P所规定的,浏览器会根据这些标签决定是否接受 cookie,实践证明,所有浏览器都支持P3P,能够设置Cookie,能够实现多域名多应用系统单点登录。
2.4 UCenter单点登录机制分析
2.4.1 UCenter单点登录流程
用户在任一web应用登录界面输入用户和密码进行登录,通过uc_client文件夹client.php中的uc_user_login函数进行验证,通过一系列函数调用最终通过socket和UCenter服务器进行通讯,传递数据进行验证。如验证通过,返回用户ID,用户姓名,加密密码等信息,然后执行uc_user_synlogin函数,通过socket和UCenter服务器通讯传递用户ID,UCenter服务器执行user.php中的onsyslogin函数,通过循环在UCenter服务器端下注册的所有应用返回在UCenter服务器端注册的所有web应用的js调用,js调用能够跨域设置Cookie,脚本样式,通过此脚本调用相应web应用下uc.php文件中的uc_note类中的synlogin函数,syslogin函数发送p3p HTTP Header后,在相应web应用下添加Cookie(也可以同时设置Session),实现了所有web应用的跨域单点登陆。
2.4.2 UCenter的单点登录机制分析
简单概况为:跨域设置用户信息。任一web应用socket远程打开UCenter服务器端,认证通过,然后传输已经登陆的用户UID,UCenter服务器端循环通过JS调用各应用下的api,在各个web应用下设置Cookie,实现单点登录,而保证Cookie通用的则是P3P协议的使用。单点登出原理相同。
UCenter系统中Authcode函数可以通过一个 KEY,生成动态的密文,并可以再通过这个KEY来解密,保障了系统传输信息的安全性。
3 Web应用单点登录系统设计与实现
3.1 UCenter服务器端搭建
首先从北京康盛新创科技有限责任公司官方网站下载UCenter 1.6.0版本代码,在服务器上按照提示安装,过程简单明了,然后为UCenter配置域名。UCenter安装完毕后,添加应用和用户数据,添加应用注意事项:应用类型选择 “其他”,应用的主URL类似填写http://www.xxx.com,通讯密钥填写不同字符,最大64字节,应用接口文件名称一般为uc.php,但不限制于此,可根据实际情况填写。应用添加成功后,生成应用配置信息,需要记录保存。
3.2 Web应用单点登录功能实现
3.2.1 基于php语言开发web应用单点登录实现
Web应用只需修改登录登出模块即可,在Web应用根目录复制粘贴UCenter 1.6.0中的uc_client、api文件夹和添加config.inc.php文件,config.inc.php文件内容是在UCenter服务器端添加应用后生成的应用配置信息。在Web应用登录模块中,引入uc_client文件夹中的client.php文件和config.inc.php文件。
Web应用账户登录代码为:
list($uid,$username,$password,$email)=uc_user_login($_POST[′username′],$_POST[′password′]);
setcookie(′Example_auth′,",-86400);
if($uid>0){
//用户登陆成功,设置 Cookie,加密直接用 uc_authcode函数,用
户使用自己的函数
setcookie(′Example_auth′,uc_authcode($uid." ".$username,′ENCODE′));
//生成同步登录的代码
$ucsynlogin=uc_user_synlogin($uid);
echo ′登 录 成 功 ′.$ucsynlogin.′
′;
exit;
}elseif($uid==-1){
为了在全球经济一体化的大环境中提高国民竞争力,同时服务一带一路的国家战略,我国的英语人才培养质量需要不断提升。面临我国学生在英语学习方面高投入、低产出的现状,需要学生、教师、学校、教育界乃至于出版市场,大家各方面形成合力,在教学资源、评价标准、英语环境、市场资源等方面进行完善。通过沉浸式英语习的环境营造、教学资源的趣味化,评价标准导向的多元化,以及市场资源的丰富化。我们期待,在不久的将来,可以看到国民英语教育能效实现明显的提升。
echo′用户不存在,或者被删除′;
}elseif($uid==-2){
echo ′密码错′;
}else{
echo ′未定义′;
}
3.2.2 基于java语言开发 web应用单点登录实现
UCenter系统只提供了php版本的api客户端,但系统是开源的,完全可以使用java语言实现相应功能。本文使用了互联网上提供的api代码,下载地址:http://code.google.com/p/discuz-ucenter-api-forjava/,将下载的java api中的代码添加到项目中,根据UCenter服务器端添加应用生成的配置信息修改config.properties,web.xml中添加:
Web应用引用java api中的XMLHelper和Client类,账户登录代码为:
Client e=new Client();
String result=e.uc_user_login("username","password");
LinkedList[String>rs=XMLHelper.uc_unserialize(result);
if(rs.size()>0){
int$uid=Integer.parseInt(rs.get(0));
if($uid>0){
System.out.println("登录成功");
String$ucsynlogin=e.uc_user_synlogin($uid);
System.out.println("单点登录成功"+$ucsynlogin);
//本地登陆代码 //TODO.......
}else if($uid==-1){
System.out.println("用户不存在,或者被删除");
}else if($uid==-2){
System.out.println("密码错");
}else{
System.out.println("未定义");
}
至此,基于java语言开发的web应用单点登录功能实现,单点登出功能类似。
4 结语
本文基于康盛新创公司的开源产品UCenter系统,实现了php语言和java语言开发web应用单点登录,Asp语言和.net语言开发web应用本文没有给出代码,同样也可以使用此项技术实现单点登录,使用单点登录系统减少了用户的多次登录认证,减轻了维护人员数据维护工作量,提高了用户便利性,具有一定的实用和推广价值。下阶段将对单点登录系统功能、性能和安全性进行深入研究。
[1]刘峰,王峥,等.基于CAS的门户单点登录方案[J].计算机系统应用,2011,30(6).
[2]陈丽,于东海.Kerberos协议在单点登录系统中的改进及应用[J].计算机系统应用,2011,20(1).
[3]单曙兵,孔磊.基于Acegi授权管理的高可用单点登录系统的研究与设计[J].计算机应用与软件,2013,30(7).
[4]高昊江,肖田元.基于 SAML改进的单点登录模型研究[J].计算机工程与设计,2011,32(3).