2 通過.NET Framework訪問活動目錄

【2 通過.NET Framework訪問活動目錄】
這里的第一個構造器是一個基本的缺省構造器,能夠在無需任何參數的情況下創建對象 。這意味著該對象將在沒有指定的安全權限的情況下連接到本機的WinNT提供者 。

第二個構造器使我們能夠指定連接到給定域的AD上所需要的證書,在需要使用給定的證書連接到任意域名時,這一構造器非常方便 。

第二個構造器中增添了LoginPath參數,這將使我們能夠覆蓋LoginPath,能夠選擇缺省提供商之外的其他服務提供者 。

下面的代碼被我稱為“活動方法”,代碼如下所示:


public DSHelper.DSUser LoadUser(string username)

這一方法用來接收用戶名,并在當前的提供者中查找DirectoryEntry 。如果沒有找到,就簡單地返回NULL 。

public System.Boolean AddUserToGroup(string groupname, DSHelper.DSUser dsUser)

這一方法接收現有組的名字和定制的DSUser類的實例,并試圖將用戶添加到提供的組中 。這也是第一個我們能看到impersonation的方法() 。這一方法的核心是下面這行代碼:

public System.Collections.ArrayList GetGroups()

我們將使用該方法獲得域中所有組的名單 。

public System.Boolean DeleteUser(DSHelper.DSUser dsUser)

這一方法獲得給定的用戶名,并從活動目錄中完全刪除它 。

public System.DirectoryServices.DirectoryEntry SaveUser(DSHelper.DSUser dsUser)

沒有實際的在數據庫中保存和插入記錄的能力,就不能被稱為一個完整的DAL 。上面的方法可以完成這二項任務,它首先檢查AD,看是否有指定的用戶存在 。如果存在,,則會用我們提供的數據更新該用戶 。如果用戶不存在,就會創建一個用戶 。

public System.Boolean Connect()

最后,我們需要一個方法,與數據庫進行連接,Connect()就是用來完成這一任務的方法 。需要指出的是,此時,它不執行任何假冒的操作或指定使用AD的證書,我們只在需要的時候才提供證書,這就使得在沒有提供安全證書的情況下,DAL只能在只讀的狀態下使用 。

下面我們將上面的內容串起來,來看看我們如何使用DAL創建ASP.NET用戶管理頁 。

ASP.NET用戶管理頁

在這一例子工程中,我們能夠為系統管理員用戶輸入用戶名和口令,它還提供了一個文本框,我們可以輸入域中任何用戶的名字,就會列出其所有屬性 。我們還可以對用戶進行編輯、保存操作,也可以完全刪除該用戶 。

現在我們來詳細地回顧整個工程,其中重點是與DAL進行交互的部份 。請讀者考慮使用新的方法改進界面,并實際地創建一個可用性更高以及更友好的設計 。另外,讀者也可以考慮如何使用控制臺應用程序創建界面 。

扮演

“扮演”這個詞的意思是,我們以其他人或用戶的身份執行操作 。在我們的ASP.NET應用程序中,這意味著我們可以暫時地客串其他用戶,而不是IIS用來處理匿名訪問的缺省帳戶的ASP.NET用戶 。我們希望能夠使自己的代碼扮演對AD資源有更大訪問權限的其他用戶,以便對資源進行適當的修改 。要完成這一過程非常簡單 。

#region setup impersonation via interop
//需要保存詳細資料時,為完成扮演需要通過InteropServices從COM中導入
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
System.Security.Principal.WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll", CharSet=CharSet.Auto)]public static extern int
LogonUser(String lpszUserName,
String lpszDomain,String lpszPassWord,int dwLogonType,int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto,

推薦閱讀