【摘要】本文提出了一個基于.NET Passport認證機制的統一身份認證系統,本系統利用Windows 2003系統自帶的Active Directory組件建立目錄服務數據庫和SQLServer數據庫,實現用戶信息、組織架構和角色的統一管理,利用.NET WebService技術實現用戶單點登錄,實現用戶統一身份認證,為數字化校園建設提供了技術參考。
【關鍵詞】統一認證Active DirectoryWebServiceASP.NET單點登錄
目前,數字化校園已成為建設現代化高校的建設目標之一,基于校園網的應用系統也越來越多,如數字化圖書館、一卡通系統、教務管理系統、校園網BBS系統等,在沒有統一身份管理的情況下,不同的業務系統需要各自維護一套用戶身份信息。對于普通用戶而言,需要對每個系統記憶一套登錄名和密碼。隨著系統數量增加,用戶必將通過降低密碼復雜度等為代價記住不同系統的登錄信息。一套統一的身份管理系統能夠讓IT集中精力,只要完善一套身份管理系統的維護,就能提綱挈領統攬全局。
1統一認證框架設計
本系統的框架采用.NET平臺進行設計,從邏輯角度上將系統框架分為:表示層、業務層、業務數據訪問層、數據訪問層,每層完成不同的功能,系統的邏輯框架設計如圖1所示。
(1)管理界面使用ASP.NET實現,管理員通過IE瀏覽器使用HTTP協議訪問管理站點,實現用戶信息、部門信息和角色的統一管理。
圖2統一認證框架結構圖
(2)接口組件使用ASP.NET Web Services實現,應用系統通過SOAP協議與接口組件進行交互,Web Services集成引擎通過各類接口和功能模塊將各應用子系統封裝成Web Services部件后發布到UDDI注冊中心,并通過接口調用相應的應用服務,實現系統的單點登錄和授權服務。
(3)所有的功能組件,包括數據庫訪問組件和AD訪問組件,使用.NET平臺實現,并作為程序集進行發布。
(4)SQLServer數據庫存儲權限信息和校內用戶信息,Windows活動目錄(AD)是整個統一身份認證系統的基礎,采用標準的LDAP目錄服務數據庫,以層次結構、面向對象的數據庫方式存儲校內用戶信息和應用系統信息,SQLServer數據庫和活動目錄實現數據同步,保證了數據的一致性和完整性,為校園網的各類應用系統提供用戶信息的共享和使用。
(5)數據庫訪問組件通過ADO.NET與數據庫交互。AD訪問組件通過.NET的類庫使用LDAP協議與活動目錄交互。
2統一認證的實現
統一身份認證平臺包含三大邏輯組成部分:目錄服務、用戶身份管理服務和用戶身份認證服務,統一認證系統設計的核心是用戶身份認證服務,用目錄服務數據庫集中存儲用戶的信息和各個應用系統的信息,實現對用戶的集中管理、統一認證和統一授權,以及實現對應用系統的訪問控制。
2.1目錄服務及用戶身份管理服務的實現
目錄服務是一種特殊的數據庫系統,可以存儲包括個人信息、web鏈結、jpeg圖像等各種更新頻率不大的信息。通過運行在TCP/IP之上的訪問協議—LDAP(Lightweight Directory Access Protocol)輕型目錄訪問協議訪問Acitve Directory中的數據。
1.目錄設計
根據調研結果中的學院、行政機構、中心等各種組織機構及下級分支機構、人員來構建整個樹狀目錄。系統目錄設計按照以下原則進行。
(1)目錄的根目錄項為學校;
(2)一個目錄項的子項為該目錄項的一個分支,具有該目錄項的所有屬性;
(3)若某一目錄項是多個目錄項的下級分支可以選擇一個特定的目錄項存儲其屬性,其他相同目錄項則對其進行引用。
2.權限設計
在設計目錄的同時,也必須對其每個分支設計權限。通過分析應用系統可以將用戶權限細分成精確的元權限,系統權限設計遵循以下原則。
(1)將同一分支組織所有成員共有的元權限設置成組織權限;
(2)其他特殊元權限,可以根據這些元權限來設計不同的虛擬角色;
(3)根據應用需要,可以將若干不同角色整合成新的虛擬組;
(4)對于特定的人員,可以設置指定的元權限;
(5)每一個成員的權限由指定的元權限、角色、組和組織權限4個部分組成,最后表現形式為元權限的組合。
3.目錄服務部署與管理
在完成系統的細節設計后,就可以按照設計思想在Active Directory上創建目錄,并部署和管理目錄服務。Active Directory自帶有一套目錄管理系統,系統開發人員可以使用這套系統來管理目錄,也可以按照目錄服務的要求自行設計一套管理系統,以便更好地滿足目錄管理的需求。
.Net架構對Active Directory提供了豐富的支持功能,其命名空間System.DirectoryServices包含的DirectoryEntry、DirectorySearcher等類庫可與任何Active Directory服務提供程序一起使用。
本系統通過ASP.NET來實現,采用C#語言,以下是通過ASP.NET實現的用戶驗證的一段代碼。
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
{
//結合本地adsobject強制認證.
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 (\"用戶身份認證錯誤\" + ex. Message);
}
return true;
}
2.2用戶身份認證服務的實現
Web Services可以看成是部署在Internet上的API,它可以方便被應用程序甚至其它Web Services集成和調用,形成新的應用服務。具有完好的封裝性,松散耦合,高度可集成能力。WebServices技術是實現“軟件作為一種服務”的體現。本系統的身份認證子模塊基于ASP.NET Web Service實現,以下為參考代碼。
1. Web服務的實現
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)
{ //判斷是否已經有驗證通過記錄
if (Session[\"name\"] == 1)
{ //查找用戶名是否存在
if (IsAuthenticated(domain, username, userpwd) == true)//調用身份認證方法
{ Session[\"name\"] = true;//該用戶的驗證記錄。避免下次再次驗證。
return true;
}
else
{ return 1;
}
}
else
{ return true;
}
}
else
{ return 1;
}
}
}
2.客戶程序登錄按鈕中WEB服務的調用
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.客戶程序首頁Page_Load中WEB服務的調用
if(!IsPostBack)
{ //判斷Cookie是否存在,如果已存在則讀取
ValidateLoginService v = new ValidateLoginService();
if (v.DoValidate (cookieDomain,cookieName, cookiePassword) == true)
{//用戶已經登錄
}
else
{//用戶未登錄
}
}
3結論
本文結合Windows活動目錄(AD)和SQLServer數據庫技術,利用微軟的.NET PassPort認證機制,向應用提供標準的SOAP服務,為應用的認證提供通用的接口和認證頁面,并調用后臺的WebService認證技術實現用戶單點登錄,設計實現了一個基于Web的校園網統一身份認證系統。