转自:http://lanhy2000.blog.163.com/blog/static/43678608201011952323130/
一、概述
非常遗憾的是,OpenMeetings没有提供基于第三方SSO(单点登录,例如CAS)系统的集成方法。但它提供了一个Web Service,官网将其命名为SOAP-Gateway,亦即一个基于SOAP的网关。这个Gateway集成了一系列的方法,可以实现从OpenMeetings的Flash客户端(前台)之外完成登录、进入房间、以及部分后台管理(如添加房间、注册新用户等)功能。
调用SOAP-Gateway的前提是你必须知道一个OpenMeetings管理员的登录名和密码。对于调用该Web Service来进行平台管理的应用,这看起来是合理的;但对于那些只是需要让一个游客直接进入某个房间的应用来说,这似乎有点不合理,从安全性角度,管理员的帐户和密码似乎不应该在外部应用中出现。
因此,对于那些只需要集成以游客身份直接进入房间的应用,建议将调用SOAP-Gateway的程序与OpenMeeting部署在一起,仅向外部应用提供一个输入游客姓名的页面url。
要了解OpenMeetings提供的SOAP-Gateway的接口信息,最简单的方法是把OpenMeetings运行起来,然后在浏览器中输入:
http://localhost:5080/openmeetings/axis2-web/
浏览器的现实如下图:

以上信息告诉我们,SOAP-Gateway实际上是一个采用AXIS2框架实现的Web Service。单击Services,我们可以查到它是由UserService、RoomService和FileService三个Service组成。再单击某个Service,如UserService或直接键入链接(http://localhost:5080/phmeetings/services/UserService?wsdl),则以wsdl方式显示出它的全部方法和接口。这些方法的说明,可以直接参考OpenMeetings的官网,链接如下:
http://code.google.com/p/openmeetings/wiki/SoapMethods
查看wsdl文件,我们发现,SOAP-Gateway实际实现了三种协议的调用接口(port):SOAP1.1协议、SOAP1.2协议、以及HTTP Get。这给我们的实现和调试带来了很大的方便。
二、SOAP-Gateway的SSO原理
SOAP-Gateway提供了几个WebService,其中的UserService是关于用户操作的,集中了getSession(获取SessionID)、AddNewUser(注册新用户)、loginUser(注册用户)、setUserObjectAndGenerateRoomHash(设置用户对象并获取房间Hash)等方法。
SOAP-Gateway实现SSO的步骤有三步:
l 第一步:向系统申请一个SessionID
l 第二步:以管理员身份登录系统(与第一步申请的SessionID绑定)
l 第三步:提交用户名、房间号等信息获得进入某个房间的secureHash(类似加密的票据)
获得Hash码之后就可以凭此组装一个直接到某个房间的url了,在浏览器中输入该url就可以直接打开房间界面了。
SOAP-Gateway在第三步时会检查用户提交的帐户是否在系统数据库中已存在,若没有,会在用户记录中插入一条新的记录。
从SOAP-Gateway的实现原理看,它并不是采用CAS那样的认证中心认证并颁发Ticket的方式,看起来倒非常象是采用管理员帐户来担保。这种方式比较适合那种封闭的应用, OpenMeetings只是作为一个平台的某个组件的应用,例如,某个教学系统,需要视频教室,于是集成了一个OpenMeetings。
如果把OpenMeetings作为一个独立的应用,需要与一些其它的应用整合,这种方式就需要比较深入的改进了。
三、SOAP-Gateway三步走测试
下面我们启动OpenMeetings的后台服务,来测试一下不同过正常的登录,如何直接进入房间:
第一步:调用getSession方法
http://localhost:5080/openmeetings/MethodGateway?service=userservice&method=getSession
返回SessionID:6a875b01f7eaeaa334e84458d29793e0
第二步:调用loginUser方法
其中:SID是第一步时返回的SessionID,username/userpass是管理员的登录名/密码(注意,必须是管理员的)。
返回值为1表示登录成功。
第三步:调用setUserObjectAndGenerateRoomHash方法
第三步的参数比较多,具体的含义参见官网上的说明。第三步返回的是一个secureHash字符串,其形式如:6c280410c96e91ea05d25e0b28b10a87。如果不是,则说明调用失败。
有了这个Hash,你就可以组装起一个直接进入房间的url地址。该Hash是与第一步中的SessionID绑定的,一旦Session实效,该Hash也失效了。
第四步 组装Url
在浏览器中输入后,试试你看到了什么?
注意:
上述测试实际上并非直接调用的SOAP接口,而是通过OpenMeetings的Servlet页面调用的,该servlet只是一个演示,并未完全实现SOAP-Gateway,很多SOAP中的方法并没有实现,在OpenMeetins的某些版本中,甚至并未实现第三步的setUserObjectAndGenerateRoomHash方法,如果我们坚持想采用servlet测试,可以将SOAP实现类中的setUserObjectAndGenerateRoomHash方法照搬到Servlet中将其补全。
建议正式应用中采用SOAP客户端的方式来实现,以保证其安全性。