基于PHPRPC 的资源库平台单点登录的实现

时间:2022-10-27 01:50:26

基于PHPRPC 的资源库平台单点登录的实现

摘要:在学院 PHP项目:高职院校共享型专业教学资源库平台的开发中,对资源库平台与现有的精品课程建设平台、在线学习平台进行单点登录整合时,通过研究与实践使用PHPRPC实现了一种单点登录的新方法,并给出了具体的原理和实现过程。

关键词:PHPRPC;资源库平台;单点登录

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)33-7457-03

在学院 PHP项目:高职院校共享型专业教学资源库平台的开发时,需要将资源库平台与现有的精品课程平台、在线学习平台进行单点登录整合,以解决三个应用系统的统一身份认证问题,方便系统的使用以及提高用户体验。单点登录目前比较成熟和稳定的解决方案,除了商业公司的产品,如:IBM的Websphere、Sun Access Manager、Microsoft Passport以及一些基于SAML的产品,还有一些开源的解决的方案,如CAS等。这些方案技术侧重点不同,实现的机制也不尽相同。但是对于此次三个WEB应用来说,这些方案并不完全适合,原因是实现成本比较高,难度也比较大,经过比较,选择了PHPRPC作为开发组件自行开发一套单点登录系统。

1 基本原理

所谓单点登录(single sign on,简称SSO),是指由一个统一的用户登录系统管理多个应用服务,提供统一的用户认证登录。登录系统与应用之间是一对多的关系,由统一的身份认证平台管理用户登录信息,一次登录信息共享——完成登录后,即可在所有的子系统间以认证用户的身份进入系统而不必重新登录,从而避免了重复开销,提高了开发和使用效率[1]。

PHPRPC是什么?PHPRPC 是一个轻型、安全、跨网际、跨语言、跨平台、跨环境、跨域、支持复杂对象传输、支持引用参数传递、支持内容输出重定向、支持分级错误处理、支持会话、面向服务的高性能远程过程调用协议[2]。基于PHPRPC的以上诸多特性,可以利用它来实现一个跨系统、跨平台、跨语言的SSO系统。

实现原理是利用浏览器(用PHPRPC for JavaScript构造)请求中心认证服务器(用PHPRPC for PHP构造),此时的浏览器就是一个单点登录页面,浏览器将用户名和密码传递给中心认证服务器,中心认证服务器验证成功之后,查找数据库里此用户名和密码对应的信息,根据这些信息生成一个令牌(token)返回给浏览器,浏览器用token再分别访问各个应用系统,应用系统用收到token访问中心认证服务器,中心认证服务器通过这个token查找应用系统用户表,找到对应的用户名和密码,然后将这个用户名和密码返回给应用系统,应用系统再用收到的用户名和密码进行登录。SSO的登录流程如图1所示。

PHPRPC的会话(包括跨域的会话)不完全依赖 Cookie,也就是说即使浏览器完全禁用Cookie,PHPRPC也会通过Cookie-less会话方式来保持浏览器客户端与服务器之间的会话状态,从而保证SSO系统对跨域和异构系统良好的兼容性。

2 系统实现

为了便于理解,借助数据库表的E-R图来描述系统实现的过程,如图2所示。

统一认证服务器收到浏览器通过JavaScript传递过来的用户名和密码检索“认证服务器用户表”,认证通过后得到“用户ID(userId)”,根据“用户ID”去检索“应用系统用户表”,然后就会得到一条或多条记录,把每一个结果都在“会话表”中生成一条记录,这里的“会话ID(tokenId)”是表的主键,也就是所谓的token,“会话表”的第二个字段id是对应的“应用系统用户表”的id主键,再根据“应用系统ID”检索“应用系统表”,从而获得应用系统的URL地址。统一认证服务器将token与应用系统的访问地址组成一个新的数组返回给浏览器,浏览器再将传回来的token作为参数访问应用系统的服务端,应用系统使用token访问统一认证服务器获取用户名和密码,完成登录。

3 核心代码

SSO的服务端由PHPRPC for PHP构建,用服务的方式提供,认证客户端通过RPC的远程过程调用相关的认证和token验证服务实现统一身份认证。

中心认证服务器端核心代码如下:

[/* 引入phprpc服务端 */

require_once("phprpc/phprpc_server.php");

/* 引入中心统一认证服务器服务类,具体程序略 */

require_once("class/Server.class.php");

/* 实例化PHPRPC服务对象 */

$AuthServer=new AuthServer($db);

$centerAuthServer = new PHPRPC_Server();

/* 注册统一认证服务 */

$centerAuthServer->add('rpcLogin',$AuthServer);

/* 注册Token验证服务 */

$centerAuthServer->add('autToken',$AuthServer);

$centerAuthServer->start();\&]

认证客户端核心代码如下:

[require_once("phprpc/phprpc_client.php");

require_once("phprpc/phprpc_server.php");

/* 客户端登录过程 */

function rpcLogin($token){

$userInfo=getUserInfo($token);

if ($userInfo!=false){

//进行模拟登录

$tempLogin=login($userInfo['username'],$userInfo['password']);

return true;

if ($tempLogin){

return true;

}else{

return false;

}

}else{

return false;\&]

[ }

}

//用token去认证中心获取用户名及密码,并返回

function getUserInfo($token){

$client = new PHPRPC_Client("http://localhost/sso/AuthServer.php");

$userInfo=$client->autToken($token);

return $userInfo;

}

//用获取的用户名及密码登陆

function login($username,$password){

$_SESSION['login']="ok";

$_SESSION['username']=$username;

return true;

}

$server = new PHPRPC_Server();

$server->add('getUserInfo');

$server->add('rpcLogin');

$server->start();\&]

4 结束语

使用PHPRPC构建的单点登录系统,解决了专业资源库平台与精品课程平台和在线学习平台的统一身份认证问题,并提供了一个新的实现思路和方法。目前此系统能够很好的接入了这三个异构的B/S系统。针对C/S系统,因为PHPRPC也提供了Delphi、C++Builder、Kylix等语言的支持,只要根据不同的开发语言对C/S系统稍加改造就能实现与单点登录系统的对接。

参考文献:

[1] 续岩,季永志.单点登录技术在Web应用中的研究与实现[J].计算机工程,2006,32(10)271-273.

[2] PHPRPC官方网站[EB/OL]. htmhttp:///zh_CN/.

上一篇:构建计算机现代化教学模式分析 下一篇:信息社会中的中等学校计算机教学