2011-08-26 79 views
1

我已經在asp.net中製作了一個web應用程序。在我的項目中,通過在數據庫中匹配用戶名和密碼來完成認證。但現在客戶端要求我在應用程序中使用Active Directory認證。客戶請求建議我使用AD中用戶的電子郵件ID進行身份驗證。活動目錄認證

我想在廣告中獲取的記錄,我可以獲取用戶的全名,但我無法得到的電子郵件ID,

我試過代碼:

System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent(); 
    string[] a = Context.User.Identity.Name.Split('\\'); 

    System.DirectoryServices.DirectoryEntry ADEntry = new System.DirectoryServices.DirectoryEntry("WinNT://" + a[0] + "/" + a[1]); 
    string Name = ADEntry.Properties["FullName"].Value.ToString(); 

進一步我使用DirectorySearcher,但它genterates錯誤,Coulnot搜索客戶端服務器中的記錄..

回答

0

對於讀取AD數據,我使用這個類。它是爲我們的廣告設置的,但基本上,你可以通過所有你想查找的「字段」,在params中。 但是你需要知道什麼字段包含電子郵件地址。 Sysinternals爲瀏覽AD提供了一個非常好的工具,可以找出您要查找的內容,稱爲ADExplorer。

但我不明白你爲什麼需要在AD看?您是否可以不假設用戶已經通過身份驗證,是否在網絡上,然後依賴Windows身份?

public static Hashtable GetAttributes(string initials, params string[] Attribute) 
{ 
    DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://ADNAME"); 
    DirectorySearcher ADSearcher = new DirectorySearcher(directoryEntry); 
    ADSearcher.Filter = "(sAMAccountName=" + initials + ")"; 
    foreach (string para in Attribute) 
    { 
     ADSearcher.PropertiesToLoad.Add(para); 
    } 
    SearchResult adSearchResult = ADSearcher.FindOne(); 

    Hashtable hshReturns = new Hashtable(); 
    foreach (string para in Attribute) 
    { 
     string strReturn = ""; 
     if (adSearchResult.Properties[para].Count == 0) 
      strReturn = ""; 
     else 
      strReturn = ((ResultPropertyValueCollection)adSearchResult.Properties[para])[0].ToString(); 
     hshReturns.Add(para, strReturn); 
    } 
    return hshReturns; 
} 
1

在製作公司門戶時,我的確有相同的情況。 如果他們不想讓你進入他們的AD,那麼你可以做的是要求獲得訪問門戶的人的NTLogins。製作一個簡單的表格,其中包含NTLogin,並使用從中訪問門戶的系統進行身份驗證。 查看我使用的示例代碼。

// Checking if the user opening this page is listed in the allowed user list against their NT login. 
     String sUser = Request.ServerVariables["LOGON_USER"].ToLower(); 
     sUser = sUser.Replace("wt\\", ""); 

     //Authentication using a custom auth method. 
     DatabaseOperations authenticateUser = new DatabaseOperations(); 
     if (!authenticateUser.authenticate(sUser)) 
     { 
      //unauthorized users will be redirected to access denied page. 
      Server.Transfer("AccessDenied.aspx", true); 
     } 

,並確保您有認證方式爲窗口在你的web.config文件

<authentication mode="Windows"></authentication> 

希望這有助於。