2008年4月10日 星期四

C# Active Directory

在Microsoft .NET Framework 中,ADSI是獨立在一個命名空間 System.DirectoryService,預設是沒被加入參考
它提供二個類別 一個是DirectoryEntry,另一個是 DirectorySearcher , 二個適用範圍不同
DirectoryEntry用來存取物件資料
DirectorySearcher 負責AD的搜尋


如果你要用System.DirectoryService存取AD,要準備三件事

一、將System.DirectoryService.dll加入參考
二、準備好可登入網域 且有可存取指定資源權限的使用考帳號碼含名稱跟密碼
三、 將想要查詢的物件階層,組合成LDAP查詢字串 (LDAP查詢字串是存取Active Directory物件的核心,每一個在AD中的物件,
都會有一個固定的唯一名稱,這個名稱叫做Distinguished Names(DN), DirectoryEntry會依LDAP所給的DN來搜尋AD,若LDAP指示的DN
找不到資料,就會傳回伺服器中無此物件的訊息。

LDAP 查詢字串的結構為

LDAP://[distinguished name]
LDAP://cn=[common name], ou=[Organization Unit Name], dc =[Doma

例如,要查詢 Acme.com的DC中的Administrator使用者時,若只有單一層的Domain 那LDAP的字串會簡單多

LDAP://cn=Administrator,cn=Users, dc=acme,dc=com

如何用AD做使用者驗證?

首先 先要由表單取得使用者輸入的名稱與密碼

並把它綁到DirectoryEntry物 件中

若要在驗證時進一步取到使用者的資訊 像uid或 sid


那可和DirectorySearcher 做整合然後啟動搜尋

若找不到使用者的物件 則可傳回錯誤

可用SearchResult.GetDirectoryEntry()來取得使用者的AD物件



DirectorySearcher searcher = new DirectorySearcher ( new DirectoryEntry("LDAP://dc=jcistudio.idv.tw",userName,password)); //設定符合使用者名稱的使用者



searcher.Filler = "(&&objectClass=User)(sAMAccountName=" + userName + "))"; //搜尋使用者

SearchResult result = searcher.Findone();
if( result == null)
Response.Write("User is not exist.") ; //錯誤訊息

沒有留言: