我有一個Web應用程序使用我們的活動目錄針對Windows身份驗證運行。我有一個新的要求,即通過Active Directory條目獲取一些個人信息。訪問這些信息最簡單的方法是什麼?活動目錄:檢索用戶信息
回答
直接通過一個DirectoryEntry訪問用戶似乎是最直接的方法。我從我的第一個AD相關項目中瞭解到一些與AD相關的花絮:
- 在URI中,以小寫寫LDAP。否則,你會得到一個神祕的錯誤。我花了一天多的時間在這個令人沮喪的問題上......
- 要清除單值屬性,請將其設置爲空字符串,而不是空值。空導致異常。
- 要清除多值屬性,請使用DirectoryEntry.Property.Clear()方法。
- Active Directory架構參考將說明一個值的數據類型以及它是多值還是單值。
- 您不需要在Directoryentry上手動刷新RefreshCache(),但是如果您曾經使用它並指定要緩存的屬性,請知道它將來不會自動檢索任何其他屬性。
- 在任何時候使用System.DirectoryServices中的類時都會拋出COMException。密切關注這些嘗試塊。不要以爲任何事情都是安全的。
如果你不知道它的路徑,你可能需要使用DirectorySearcher來獲取你的用戶的目錄條目(你不會,只要讓他登錄)。使用它很容易,但要小心LDAP語法中的怪癖;即不得不編碼非ASCII(和其他?)字符。您使用的搜索字符串可能類似於:(&(sAMAccountName = whatever)(class = user))。這是我的頭頂,可能稍微不正確。
Active Directory schema reference將會有用。請理解可以修改和擴展架構(例如,安裝Exchange將向用戶添加郵箱信息)。
AD Explorer是一個有用的工具,您可以使用它進行調試和低級AD數據管理。當我知道我要設置哪個屬性,但無法在AD管理工具中找到正確的對話框時,我發現它很有用。
我已經使用標準LDAP庫從Active Directory服務器檢索信息,但是您必須通過LDAP服務器的模式驗證您需要的數據是否可用。一般來說,您可以獲取存儲在InetOrganizationalPerson中的任何信息以及與其所屬組織有關的大部分信息。
看一看System.DirectoryServices命名空間:
+1爲一體的現代化的答案。 – 2012-10-31 16:55:30
您可能會發現下面的代碼片段可用作啓動器。
public static bool IsUserInGroup(string lanid, string group)
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH);
if(entry != null)
{
[email protected]"LDAPUSER";
entry.Password="LDAPPASSWORD";
DirectorySearcher srch = new DirectorySearcher(entry);
srch.Filter = String.Format("(&(objectClass=person)(sAMAccountName={0}))", lanid);
srch.PropertiesToLoad.Add("memberOf");
SearchResult result = srch.FindOne();
if(result != null)
{
if(result.Properties.Contains("memberOf"))
{
string lookfor = String.Format("cn={0},", group.ToLower());
foreach(string memberOf in result.Properties["memberOf"])
{
if(memberOf.ToLower().StartsWith(lookfor))
return true;
}
}
}
return false;
}
throw new Exception(String.Format("Could not get Directory lanid:{0}, group{1}", lanid, group));
}
- 1. 拉活動目錄用戶信息
- 2. 檢索用戶信息,並檢查是否在使用VB.NET的活動目錄中的組的成員
- 3. 將地址信息添加到活動目錄用戶
- 4. 需要在活動目錄中顯示用戶的信息
- 5. 獲取用戶活動目錄詳細信息
- 6. 讀書交流活動目錄信息
- 7. MVC5如何從Azure活動目錄中檢索所有用戶
- 8. 從活動目錄中檢索用戶列表
- 9. 僅檢索活動目錄上的已啓用帳戶
- 10. 活動目錄 - 獲取新創建的帳戶詳細信息
- 11. 使用Fb檢索用戶登錄信息
- 12. 檢索特定用戶ID的信息
- 13. 從auth組件檢索用戶信息
- 14. 檢索Facebook用戶標記的信息
- 15. 檢索facebook的用戶信息
- 16. 從OpemAM中檢索用戶信息
- 17. facebook php sdk:檢索用戶信息
- 18. Infragistics Ultralistview MouseHover檢索用戶信息
- 19. 存儲DotNetOpenAuth信息和用戶信息檢索
- 20. 使用java JNDI更新信息活動目錄數據?
- 21. 使用活動目錄中的信息解鎖窗口
- 22. 如何從集合選擇中的活動記錄中檢索信息?
- 23. 不吸引活躍用戶的用戶登錄信息
- 24. 目錄與目錄信息
- 25. 在C#中尋找信任域中的活動目錄用戶
- 26. SQL Server啓用活動目錄用戶
- 27. 檢索EKCalendar的帳戶信息
- 28. 從本地網絡上的活動目錄中檢索用戶名和暱稱
- 29. 機器學習/信息檢索項目
- 30. 檢索日曆事件條目信息
剛剛完成一些代碼基本上是你說的。使用DirectoryHarcher,並獲取我需要的信息。幸運的是,我只需要檢索非常基本的信息。 – 2008-09-25 09:37:45
對我來說,寫小寫的ldap拋出了一個COMException。 – 2013-04-24 08:48:02