一、問題引出
我校于2000年建立了校園網,現(xiàn)已形成一個初具規(guī)模的數(shù)字校園系統(tǒng),該系統(tǒng)由多個子系統(tǒng)構成。然而,系統(tǒng)的開發(fā)缺乏標準化、規(guī)范化和兼容性,不能實現(xiàn)數(shù)據(jù)共享、互聯(lián)互通,出現(xiàn)了一個個“信息孤島”。尤其是各個系統(tǒng)帶有用戶身份驗證的功能,使得教師必須去記多個用戶名和密碼,給系統(tǒng)的推廣應用帶來極大的不便。如何讓教師使用一套用戶名和密碼,就能登錄所有應用系統(tǒng)呢?同樣,我校后期要開發(fā)的應用系統(tǒng)(如選課系統(tǒng)、調查系統(tǒng))又如何與原有的應用系統(tǒng)接軌?這些問題成為我校教育信息化進一步發(fā)展的最大阻礙。
為解決以上問題,一些學校往往在新建校園網系統(tǒng)時,指定某一家軟件開發(fā)商來做應用系統(tǒng)的整合工作,由該軟件開發(fā)商修改各個系統(tǒng)的認證方式,讓不同系統(tǒng)直接讀取一個中心數(shù)據(jù)庫,從而實現(xiàn)用戶統(tǒng)一身份認證。但是,這種中心數(shù)據(jù)庫形式的解決方案對我校來說是不現(xiàn)實的。因為它需要耗費一定的財力,而且我?,F(xiàn)有系統(tǒng)存在跨網段(中心數(shù)據(jù)庫服務器處于校園網的防火墻后,其他校區(qū)無法訪問)、跨平臺、跨數(shù)據(jù)庫(如我校的網絡教學平臺系統(tǒng)是PHP開發(fā)的,使用Mysql數(shù)據(jù)庫,運行在Linux中)的問題,技術上很難解決,況且直接讀取數(shù)據(jù)庫的做法本身是存在安全隱患的。為此,我們嘗試自己改造這些系統(tǒng),設計了以XML技術為核心的統(tǒng)一身份認證方案,并自主開發(fā)安全簡單的統(tǒng)一身份認證系統(tǒng)(Unified Identity Service),以Web方式對外部系統(tǒng)提供身份驗證服務,初步實現(xiàn)了跨系統(tǒng)、跨網段的用戶統(tǒng)一認證功能。
二、統(tǒng)一身份認證系統(tǒng)的功能分析
校園網采用統(tǒng)一身份認證,必然要對原有系統(tǒng)改造和整合,這就涉及如何確保原有系統(tǒng)的穩(wěn)定和安全問題。經多次研究和實踐,我們認為把統(tǒng)一身份驗證系統(tǒng)作為單獨服務系統(tǒng)來開發(fā)的做法比較合理,其他應用系統(tǒng)只需按照一定的規(guī)范調用這個服務,而不需要對原系統(tǒng)做出較大的改動,減少了系統(tǒng)改造和整合的工作量。
為了方便描述,本文將提供身份驗證服務的系統(tǒng)命名為統(tǒng)一身份認證系統(tǒng),而需要通過該系統(tǒng)來驗證身份的各個應用系統(tǒng),統(tǒng)稱為子系統(tǒng)。
1.系統(tǒng)功能要求
統(tǒng)一身份認證系統(tǒng)一般包括三大功能:(1)用戶認證。(2)用戶的集中管理。(3)應用系統(tǒng)注冊。各功能模塊相對獨立,可以分別實現(xiàn)。其中用戶認證模塊最重要,其功能是接收子系統(tǒng)提交的用戶名、密碼信息和其他指令,返回相應的信息。
2.系統(tǒng)性能要求
統(tǒng)一身份認證系統(tǒng)負責多個子系統(tǒng)的用戶身份認證。為了確保身份驗證的響應速度,系統(tǒng)所在的服務器性能要高,同時帶寬也要大,確保大量用戶同時提交驗證請求時不會響應延遲。
3.系統(tǒng)運行需求和開發(fā)工具
運行統(tǒng)一身份認證系統(tǒng)需要數(shù)據(jù)庫服務器(存儲用戶數(shù)據(jù))和Web服務器(響應身份驗證)。在子系統(tǒng)數(shù)和用戶不多的情況下,使用Access數(shù)據(jù)庫即可。開發(fā)語言可以使用任何一種動態(tài)網頁技術語言。
三、統(tǒng)一身份認證系統(tǒng)總體設計
統(tǒng)一身份認證的工作原理如下:當用戶訪問某成員站點時,子系統(tǒng)將用戶名和密碼以HTTP的方式提交到統(tǒng)一身份認證系統(tǒng)的認證接口(API),統(tǒng)一身份認證系統(tǒng)根據(jù)接收到的信息和指令,返回用戶身份信息,供子系統(tǒng)調用。這一過程對用戶來說是透明的,在網絡不阻塞的情況下,用戶無法察覺驗證過程的復雜與否。
1.系統(tǒng)總體設計思想
以Web方式提供身份驗證服務,接收子系統(tǒng)(代理)提交的用戶名和密碼,然后根據(jù)密碼的錯誤與否和其他指令返回包含不同數(shù)據(jù)的XML文件。我們規(guī)定了認證提交的URL參數(shù)格式和認證返回的XML文件數(shù)據(jù)格式。
(1)認證提交的URL參數(shù)格式
URL:http://www.wzms.cn/API/checkuser.asp
參數(shù)說明:u:用戶名,p:密碼,ac:請求指令,其中1表示返回基本信息、2表示返回擴展信息、3表示修改密碼、p1:要修改的密碼。
認證提交的URL范例詳見http://www.wzms.cn/api/demo.asp。
(2)認證返回的XML文件數(shù)據(jù)格式
XML字段名XML字段含義(不同狀態(tài)返回的數(shù)據(jù))是否必需
status狀態(tài)(成功返回1,失敗返回0)是(基礎屬性)
message錯誤提示(成功返回“無”)是(基礎屬性)
userid用戶id(成功返回用戶id,失敗返回0)否(基礎屬性)
………
2.統(tǒng)一認證系統(tǒng)的數(shù)據(jù)庫設計
在中心數(shù)據(jù)庫服務器上建立一張完整的用戶信息表,作為學校用戶信息數(shù)據(jù)源,我們稱之為統(tǒng)一身份表。該表至少包括姓名、工號、登錄密碼、所屬部門、身份證號等信息(符合國家教育部《教育管理信息化標準》)。
3.統(tǒng)一身份認證系統(tǒng)的運行流程圖
四、統(tǒng)一身份認證系統(tǒng)核心代碼
我們采用了ASP代碼編寫該系統(tǒng)。鑒于篇幅,僅提供了部分核心代碼,去除了一些關于注入過濾之類的功能函數(shù)。用戶的管理模塊和數(shù)據(jù)庫的說明略。
認證模塊的核心代碼:
Response.Charset=\"gb2312\"
Response.contentType = \"text/XML\"
username=(request(\"u\"):userpass=request(\"p\")
userpass1=request(\"p1\"):ac=request(\"ac\")
set rs=server.createobject(\"adodb.recordset\")
sql=\"select*from user where username='\"username\"'\" ‘查詢數(shù)據(jù)庫
rs.open sql,conn,1,3
if rs.bof or rs.eof then
call mywriteXML(0,0,0,0,0,0,\"用戶名錯誤!\",0,0)
else
if md5(userpass)<>rs(\"userpass\") then
call mywriteXML(0,0,0,0,0,0,\"密碼錯誤!\",0,0)
else
select case ac
case 1’返回基礎信息
call mywriteXML(1,rs(\"userid\"),rs(\"username\"),rs(\"bqq\"),rs(\"xuekeid\"),rs(\"schoolid\"),\"驗證通過!\",0,0)
case 2’返回擴展信息
call mywriteXML(1,rs(\"userid\"),rs(\"username\"),rs(\"bqq\"),rs(\"xuekeid\"),rs(\"schoolid\"),\"驗證通過!\",1,rs(\"sex\"))
case 3’修改密碼并返回基礎信息
rs(\"userpass\")=md5(userpass1)
rs.update
call mywriteXML(1,rs(\"userid\"),rs(\"username\"),rs(\"bqq\"),rs(\"xuekeid\"),rs(\"schoolid\"),\"密碼修改成功!\",0,0)
case else
call mywriteXML(1,rs(\"userid\"),rs(\"username\"),rs(\"bqq\"),rs(\"xuekeid\"),rs(\"schoolid\"),\"驗證通過!\",0,0)
end select
end if
end if
rs.close
注:mywriteXML為生成XML文件的子過程。
五、子系統(tǒng)身份認證的應用
子系統(tǒng)的遠程驗證代碼的核心功能是發(fā)送HTTP請求,然后讀取遠程XML文件,根據(jù)XML的字段值判斷是否驗證成功。在Web開發(fā)語言中,一般使用MSXML2.XMLHTTP對象發(fā)送HTTP請求,使用DOM方法(如Microsoft.XMLDOM對象)處理XML文件。因為XML是跨平臺的語言,任何系統(tǒng)都可以使用XML的解析器,所以遠程驗證不受各子系統(tǒng)和統(tǒng)一身份認證系統(tǒng)是否處于同一臺服務器或者同一網段的限制,也不受子系統(tǒng)使用的編程語言和數(shù)據(jù)庫的限制,只要子系統(tǒng)所處的服務器能夠以HTTP方式訪問統(tǒng)一身份認證系統(tǒng),實現(xiàn)身份統(tǒng)一認證。
1.簡單子系統(tǒng)(不帶用戶管理功能)的身份認證
溫州中學“教師讀名著”活動調查系統(tǒng)是我校信息中心自主開發(fā)的應用系統(tǒng)。為了確保調查數(shù)據(jù)的準確性,校辦要求教師以實名登錄。根據(jù)統(tǒng)一身份認證系統(tǒng)的認證規(guī)范(API),在用戶認證方面加上遠程驗證代碼后,雖然該子系統(tǒng)和統(tǒng)一身份認證系統(tǒng)并不在同一臺服務器上,但是卻與其他應用系統(tǒng)間實現(xiàn)了無縫整合。
遠程驗證的asp代碼:
XMLurl = \"http://www.wzms.cn/API/checkuser.asp?u=\" username \"p=\" userpass
Set http=Server.CreateObject(\"MSXML2.XMLHTTP\")
http.Open \"POST\",XMLurl,F(xiàn)alse
http.send
Set Doc=Server.CreateObject(\"Microsoft.XMLDOM\")
Doc.Async=False
Doc.ValidateOnParse=False
Doc.Load(http.ResponseXML)
set nodeLis = Doc.getElementsByTagName(\"response\")
status=nodeLis(0).selectSingleNode(\"status\").text '驗證狀態(tài)
message=nodeLis(0).selectSingleNode(\"message\").text '錯誤信息
Set Doc = Nothing
''判斷status是否為1:是,則登錄;否,提示錯誤,要求重新登錄
if status<>\"1\" then
ShowMsg message,\"0\",\"login.asp\"
else
session(\"user\")=username
response.redirect \"main.asp\"
end if
注:ShowMsg為顯示錯誤信息的子過程。
2.復雜子系統(tǒng)(自帶用戶管理功能)的身份認證
教科研成果登記系統(tǒng)是我校委托軟件公司開發(fā)的Web應用系統(tǒng)。該系統(tǒng)雖然具有完整的用戶管理功能,但是其用戶驗證是使用統(tǒng)一身份認證系統(tǒng)驗證的。用戶第一次登錄系統(tǒng)將自動在子系統(tǒng)的數(shù)據(jù)庫用戶表中添加新記錄,即驗證通過后,子系統(tǒng)在自己的用戶表中查找用戶名是否存在,如果不存在就執(zhí)行添加用戶的操作,用戶信息從XML文件中讀取。自動添加用戶的遠程驗證asp代碼略。
六、統(tǒng)一身份認證系統(tǒng)的應用反思
這種簡單的統(tǒng)一身份認證模式,已經能滿足大多數(shù)應用系統(tǒng)的需求,其優(yōu)勢如下。
1.包容性和擴展性好
該認證系統(tǒng)獨立于任何具體的應用系統(tǒng)而自成體系,同時以開放的接入方式,為子系統(tǒng)提供滿足其自身權限需求的認證信息,便于子系統(tǒng)的獨立開發(fā)。而且每一次認證的數(shù)據(jù)交換量少,響應快速。經測試,使用普通的PC服務器,在ASP+IIS6.0 +SQL2000的架構上,同時響應數(shù)十次的驗證請求,系統(tǒng)沒有發(fā)現(xiàn)延遲現(xiàn)象。
2.XML的技術門檻低,開發(fā)速度快
XML使用一系列簡單的標記描述數(shù)據(jù),這些標記建立方便,易于掌握和使用開發(fā)。如果指定校園網中的某一個應用較廣的系統(tǒng)用戶數(shù)據(jù)庫為認證系統(tǒng)的用戶數(shù)據(jù)庫,還可以省去用戶管理模塊的開發(fā)過程。如果已經建立了用戶數(shù)據(jù)庫,僅需改動驗證模塊的幾個關鍵參數(shù)就可以正常運行。
3.符合EMIF規(guī)范的開發(fā)思路
制定EMIF規(guī)范的目的是為了給我國教育城域網和校園網的軟件建設提供統(tǒng)一的指導規(guī)范,目前已經成立了以北京師范大學為首,以國內各大教育軟件開發(fā)商為主體的EMIF工作組。而EMIF規(guī)范使用的數(shù)據(jù)對象就是以XML封裝,可見我們選擇的核心技術是合理的。只要逐步按照EMIF規(guī)范來修改,我們的認證系統(tǒng)就能與國內教育開發(fā)商的新產品實現(xiàn)無縫整合。
(作者單位:浙江溫州中學)