门户网站身份认证系统设计
背景 | ||||
a)提供统一的认证途径。宽带门户网站的各个内容服务系统是从不同的内容提供商手中获得的,每个系统都有各自的用户系统和认证方式。让用户每访问一个内容服务系统就需要登录一次,显然是用户难以接受的认证方式。因此身份认证系统要提供一个统一的身份认证,让用户一次登录,可以访问全网的资源 b)系统具有良好的可扩展性和可集成性。宽带门户网站在发展过程中还会不断地提供新的内容服务,这就要求身份认证系统具有良好的扩展性和可集成性,不仅能支持现有的内容业务系统及其现有的用户系统,当有新的内容业务系统被部署或开发的时候,这个统一身份认证服务可以作为它的身份认证模块的形式工作,也就是说,新的内容业务系统可以不自带用户系统,可以通过集成该服务的形式来实现等价的功能。 c)系统提供跨平台认证的功能。各个内容业务系统各有特点,分别运行在不同的平台上,都要能和身份认证系统交互,这就要求身份认证系统提供跨平台认证的功能。 d)系统具有良好的安全性。由于使用内容业务系统,用户要付费,身份认证系统要保障用户的安全。 解决方案 1、统一认证的两种方式 统一身份认证系统的核心思想是将用户统一存储,对应用系统统一授权,规范内容业务系统的用户认证方式,从而达到提高整个系统的整体性、可管理性和安全性的效果。内容业务系统要想判断某一用户是否可以访问自己,必须和身份认证系统进行交互。由身份认证系统负责对用户进行集中认证。 用户访问内容服务系统可以有两种方式:通过宽带门户网站访问内容服务系统,或者是直接访问内容服务系统。根据这两种访问方式身份认证系统要提供两种认证方式。 第一种认证方式:用户直接登陆内容业务系统,内容业务系统将用户提供的用户名/密码等转发给统一身份认证服务以检验其是否通过授权。流程如图1所示
第二种认证方式:用户首先登录统一身份认证系统,验证其是否为合法注册用户,如果是合法用户可获取权限值。由于合法用户不一定开通了所有的内容服务,所以使用这个权限值访问内容业务系统时,内容业务系统将根据该权限值与统一身份认证服务进行交互,以检验访问的合法性。流程如图2所示
2、安全方案
流程描述如下: 1) 用户登录时将用户名、口令提交给VOD系统;VOD系统将用户名转发给身份认证系统。 2) VOD系统将用户名、口令和时间戳一起加密后形成字符串PWD。 3) 同时,身份认证系统根据得到用户名查得用户的注册密码,并把用户名、注册密码、时间戳一起加密后形成字符串PASS。 4) VOD系统把PWD发送给身份认证系统。身份认证系统比较两者是否一致 5) 如果一致则允许用户进入VOD系统的页面。用户选择观看的影片 6) VOD系统再次生成PWD,身份认证系统再次生成PASS,并再次比较两者是否一致。如果一致,则播放影片 3、通用接口 为了能让运行在不同的平台上的内容业务系统都能够访问身份认证系统,并且让身份认证系统能够不断地集成新的内容业务系统,当身份认证系统统一认证功能和安全方面的功能后实现以后,我们利用WEB SERVICES技术架构,把身份认证系统转换成身份认证服务。 该服务把身份认证系统提供的各项功能用WSDL语言描述成通用的服务接口,在这个接口中描述了身份认证服务提供给内容业务系统使用的一个函数,该函数的入口参数是用户名、用户口令和内容业务系统的ID;出口参数是该用户能否访问该内容业务系统的字符串。 以下是身份认证接口的WSDL描述:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="railwayhelperRemoteInterface" targetNamespace="http://www.railwayhelper.com/definitions/railwayhelperRemoteInterface" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.railwayhelper.com/definitions/railwayhelperRemoteInterface" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <message name="loginRequest"> <part name="userid" type="xsd:string"/> <part name="password" type="xsd:string"/> <part name="serviceid" type="xsd:string"/> </message> <message name="loginResponse"> <part name="result" type="xsd:string"/> </message> <portType name="railwayhelperJavaPortType"> <operation name="login"> <input name="loginRequest" message="tns: loginRequest"/> <output name="loginResponse" message="tns: loginResponse"/> </operation> </portType> <binding name="railwayhelperBinding" type="tns:railwayhelperJavaPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="login"> <soap:operation soapAction="" style="rpc"/> <input name="loginRequest"> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://tempuri.org/creator.javabean.railwayhelper"/> </input> <output name="loginResponse"> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://tempuri.org/creator.javabean.railwayhelper"/> </output> </operation> </binding> </definitions> 在这个接口中描述了身份认证服务提供的login函数,该服务的入口参数为:userid为用户名、password为用户名、口令和时间戳一起加密后得到的字符串PWD、serviceid内容业务系统编号,返回值是否允许用户登录该内容业务系统的字符串。 不论内容业务系统运行在何种平台上,只要根据WSDL接口的描述和SOAP协议规范,把用户名和PWD用SOAP消息发送给身份认证服务,身份认证服务就会把认证结果用SOAP消息返回个内容业务系统。内容业务系统不必了解认证服务是怎样实现的,从而实现跨平台的通用认证。 结束语 上述的宽带门户网站的身份认证方案已经实际应用于了湖南铁通宽带门户网站,取得了良好的效果。 |