【摘要】本文提出了一個(gè)基于.NET Passport認(rèn)證機(jī)制的統(tǒng)一身份認(rèn)證系統(tǒng),本系統(tǒng)利用Windows 2003系統(tǒng)自帶的Active Directory組件建立目錄服務(wù)數(shù)據(jù)庫和SQLServer數(shù)據(jù)庫,實(shí)現(xiàn)用戶信息、組織架構(gòu)和角色的統(tǒng)一管理,利用.NET WebService技術(shù)實(shí)現(xiàn)用戶單點(diǎn)登錄,實(shí)現(xiàn)用戶統(tǒng)一身份認(rèn)證,為數(shù)字化校園建設(shè)提供了技術(shù)參考。
【關(guān)鍵詞】統(tǒng)一認(rèn)證Active DirectoryWebServiceASP.NET單點(diǎn)登錄
目前,數(shù)字化校園已成為建設(shè)現(xiàn)代化高校的建設(shè)目標(biāo)之一,基于校園網(wǎng)的應(yīng)用系統(tǒng)也越來越多,如數(shù)字化圖書館、一卡通系統(tǒng)、教務(wù)管理系統(tǒng)、校園網(wǎng)BBS系統(tǒng)等,在沒有統(tǒng)一身份管理的情況下,不同的業(yè)務(wù)系統(tǒng)需要各自維護(hù)一套用戶身份信息。對于普通用戶而言,需要對每個(gè)系統(tǒng)記憶一套登錄名和密碼。隨著系統(tǒng)數(shù)量增加,用戶必將通過降低密碼復(fù)雜度等為代價(jià)記住不同系統(tǒng)的登錄信息。一套統(tǒng)一的身份管理系統(tǒng)能夠讓IT集中精力,只要完善一套身份管理系統(tǒng)的維護(hù),就能提綱挈領(lǐng)統(tǒng)攬全局。
1統(tǒng)一認(rèn)證框架設(shè)計(jì)
本系統(tǒng)的框架采用.NET平臺進(jìn)行設(shè)計(jì),從邏輯角度上將系統(tǒng)框架分為:表示層、業(yè)務(wù)層、業(yè)務(wù)數(shù)據(jù)訪問層、數(shù)據(jù)訪問層,每層完成不同的功能,系統(tǒng)的邏輯框架設(shè)計(jì)如圖1所示。
(1)管理界面使用ASP.NET實(shí)現(xiàn),管理員通過IE瀏覽器使用HTTP協(xié)議訪問管理站點(diǎn),實(shí)現(xiàn)用戶信息、部門信息和角色的統(tǒng)一管理。
圖2統(tǒng)一認(rèn)證框架結(jié)構(gòu)圖
(2)接口組件使用ASP.NET Web Services實(shí)現(xiàn),應(yīng)用系統(tǒng)通過SOAP協(xié)議與接口組件進(jìn)行交互,Web Services集成引擎通過各類接口和功能模塊將各應(yīng)用子系統(tǒng)封裝成Web Services部件后發(fā)布到UDDI注冊中心,并通過接口調(diào)用相應(yīng)的應(yīng)用服務(wù),實(shí)現(xiàn)系統(tǒng)的單點(diǎn)登錄和授權(quán)服務(wù)。
(3)所有的功能組件,包括數(shù)據(jù)庫訪問組件和AD訪問組件,使用.NET平臺實(shí)現(xiàn),并作為程序集進(jìn)行發(fā)布。
(4)SQLServer數(shù)據(jù)庫存儲權(quán)限信息和校內(nèi)用戶信息,Windows活動(dòng)目錄(AD)是整個(gè)統(tǒng)一身份認(rèn)證系統(tǒng)的基礎(chǔ),采用標(biāo)準(zhǔn)的LDAP目錄服務(wù)數(shù)據(jù)庫,以層次結(jié)構(gòu)、面向?qū)ο蟮臄?shù)據(jù)庫方式存儲校內(nèi)用戶信息和應(yīng)用系統(tǒng)信息,SQLServer數(shù)據(jù)庫和活動(dòng)目錄實(shí)現(xiàn)數(shù)據(jù)同步,保證了數(shù)據(jù)的一致性和完整性,為校園網(wǎng)的各類應(yīng)用系統(tǒng)提供用戶信息的共享和使用。
(5)數(shù)據(jù)庫訪問組件通過ADO.NET與數(shù)據(jù)庫交互。AD訪問組件通過.NET的類庫使用LDAP協(xié)議與活動(dòng)目錄交互。
2統(tǒng)一認(rèn)證的實(shí)現(xiàn)
統(tǒng)一身份認(rèn)證平臺包含三大邏輯組成部分:目錄服務(wù)、用戶身份管理服務(wù)和用戶身份認(rèn)證服務(wù),統(tǒng)一認(rèn)證系統(tǒng)設(shè)計(jì)的核心是用戶身份認(rèn)證服務(wù),用目錄服務(wù)數(shù)據(jù)庫集中存儲用戶的信息和各個(gè)應(yīng)用系統(tǒng)的信息,實(shí)現(xiàn)對用戶的集中管理、統(tǒng)一認(rèn)證和統(tǒng)一授權(quán),以及實(shí)現(xiàn)對應(yīng)用系統(tǒng)的訪問控制。
2.1目錄服務(wù)及用戶身份管理服務(wù)的實(shí)現(xiàn)
目錄服務(wù)是一種特殊的數(shù)據(jù)庫系統(tǒng),可以存儲包括個(gè)人信息、web鏈結(jié)、jpeg圖像等各種更新頻率不大的信息。通過運(yùn)行在TCP/IP之上的訪問協(xié)議—LDAP(Lightweight Directory Access Protocol)輕型目錄訪問協(xié)議訪問Acitve Directory中的數(shù)據(jù)。
1.目錄設(shè)計(jì)
根據(jù)調(diào)研結(jié)果中的學(xué)院、行政機(jī)構(gòu)、中心等各種組織機(jī)構(gòu)及下級分支機(jī)構(gòu)、人員來構(gòu)建整個(gè)樹狀目錄。系統(tǒng)目錄設(shè)計(jì)按照以下原則進(jìn)行。
(1)目錄的根目錄項(xiàng)為學(xué)校;
(2)一個(gè)目錄項(xiàng)的子項(xiàng)為該目錄項(xiàng)的一個(gè)分支,具有該目錄項(xiàng)的所有屬性;
(3)若某一目錄項(xiàng)是多個(gè)目錄項(xiàng)的下級分支可以選擇一個(gè)特定的目錄項(xiàng)存儲其屬性,其他相同目錄項(xiàng)則對其進(jìn)行引用。
2.權(quán)限設(shè)計(jì)
在設(shè)計(jì)目錄的同時(shí),也必須對其每個(gè)分支設(shè)計(jì)權(quán)限。通過分析應(yīng)用系統(tǒng)可以將用戶權(quán)限細(xì)分成精確的元權(quán)限,系統(tǒng)權(quán)限設(shè)計(jì)遵循以下原則。
(1)將同一分支組織所有成員共有的元權(quán)限設(shè)置成組織權(quán)限;
(2)其他特殊元權(quán)限,可以根據(jù)這些元權(quán)限來設(shè)計(jì)不同的虛擬角色;
(3)根據(jù)應(yīng)用需要,可以將若干不同角色整合成新的虛擬組;
(4)對于特定的人員,可以設(shè)置指定的元權(quán)限;
(5)每一個(gè)成員的權(quán)限由指定的元權(quán)限、角色、組和組織權(quán)限4個(gè)部分組成,最后表現(xiàn)形式為元權(quán)限的組合。
3.目錄服務(wù)部署與管理
在完成系統(tǒng)的細(xì)節(jié)設(shè)計(jì)后,就可以按照設(shè)計(jì)思想在Active Directory上創(chuàng)建目錄,并部署和管理目錄服務(wù)。Active Directory自帶有一套目錄管理系統(tǒng),系統(tǒng)開發(fā)人員可以使用這套系統(tǒng)來管理目錄,也可以按照目錄服務(wù)的要求自行設(shè)計(jì)一套管理系統(tǒng),以便更好地滿足目錄管理的需求。
.Net架構(gòu)對Active Directory提供了豐富的支持功能,其命名空間System.DirectoryServices包含的DirectoryEntry、DirectorySearcher等類庫可與任何Active Directory服務(wù)提供程序一起使用。
本系統(tǒng)通過ASP.NET來實(shí)現(xiàn),采用C#語言,以下是通過ASP.NET實(shí)現(xiàn)的用戶驗(yàn)證的一段代碼。
private string _path;
private string _filterAttribute;
public LdapAuthentication(string path)
{
_path = path;
}
public bool IsAuthenticated (string domain, string username, string pwd)
{
string domainAndUsername = domain + @\"\\" + username;
DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
try
{
//結(jié)合本地adsobject強(qiáng)制認(rèn)證.
object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = \"(SAMAccountName=\" + username +\")\";
search.PropertiesToLoad.Add(\"cn\");
SearchResult result = search.FindOne( );
if(1 == result)
{
return 1;
}
//更新的新路徑給用戶的目錄.
_path = result.Path;
_filterAttribute = (string)result.Properties[\"cn\"][0];
}
catch (Exception ex)
{
throw new Exception (\"用戶身份認(rèn)證錯(cuò)誤\" + ex. Message);
}
return true;
}
2.2用戶身份認(rèn)證服務(wù)的實(shí)現(xiàn)
Web Services可以看成是部署在Internet上的API,它可以方便被應(yīng)用程序甚至其它Web Services集成和調(diào)用,形成新的應(yīng)用服務(wù)。具有完好的封裝性,松散耦合,高度可集成能力。WebServices技術(shù)是實(shí)現(xiàn)“軟件作為一種服務(wù)”的體現(xiàn)。本系統(tǒng)的身份認(rèn)證子模塊基于ASP.NET Web Service實(shí)現(xiàn),以下為參考代碼。
1. Web服務(wù)的實(shí)現(xiàn)
public class ValidateLoginService : System.Web.Services. WebService
{ public ValidateLoginService( )
{ InitializeComponent( );
}
[WebMethod(EnableSession = true)]
public bool DoValidate (string domain, string username, string userpwd)
{ if (username != 1 userpwd != 1)
{ //判斷是否已經(jīng)有驗(yàn)證通過記錄
if (Session[\"name\"] == 1)
{ //查找用戶名是否存在
if (IsAuthenticated(domain, username, userpwd) == true)//調(diào)用身份認(rèn)證方法
{ Session[\"name\"] = true;//該用戶的驗(yàn)證記錄。避免下次再次驗(yàn)證。
return true;
}
else
{ return 1;
}
}
else
{ return true;
}
}
else
{ return 1;
}
}
}
2.客戶程序登錄按鈕中WEB服務(wù)的調(diào)用
string domain=this.TxtDomain.Text;
string name = this.TxtName.Text;
string password = this.TxtPwd.Text;
//判斷用戶名跟密碼是否匹配
ValidateLoginService v = new ValidateLoginService( );
if (v.DoValidate(domain,name, password) == true)
{ //寫入Cookie代碼省略
Session[\"name\"] = name;//登錄成功,并保存登錄姓名
}
else
{//登錄失敗
}
3.客戶程序首頁P(yáng)age_Load中WEB服務(wù)的調(diào)用
if(!IsPostBack)
{ //判斷Cookie是否存在,如果已存在則讀取
ValidateLoginService v = new ValidateLoginService();
if (v.DoValidate (cookieDomain,cookieName, cookiePassword) == true)
{//用戶已經(jīng)登錄
}
else
{//用戶未登錄
}
}
3結(jié)論
本文結(jié)合Windows活動(dòng)目錄(AD)和SQLServer數(shù)據(jù)庫技術(shù),利用微軟的.NET PassPort認(rèn)證機(jī)制,向應(yīng)用提供標(biāo)準(zhǔn)的SOAP服務(wù),為應(yīng)用的認(rèn)證提供通用的接口和認(rèn)證頁面,并調(diào)用后臺的WebService認(rèn)證技術(shù)實(shí)現(xiàn)用戶單點(diǎn)登錄,設(shè)計(jì)實(shí)現(xiàn)了一個(gè)基于Web的校園網(wǎng)統(tǒng)一身份認(rèn)證系統(tǒng)。