如何在C#.NET for ASP中從LDAP活動目錄中獲取用戶組的用戶組。在我的方案中,我想將用戶名傳遞給從LDAP Active Directory中查詢的方法,並告訴我我的用戶是此用戶組的成員。請在此幫助我從LDAP查詢用戶組
8
A
回答
12
如果你在.NET 3.5或更新版本,您還可以使用新的System.DirectoryServices.AccountManagement
(S.DS.AM)命名空間。
有了這個,你可以這樣做:
// create context for domain
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find the user
UserPrincipal up = UserPrincipal.FindByIdentity(ctx, "YourUserName");
if(up != null)
{
// get groups for that user
var authGroups = up.GetAuthorizationGroups();
}
瞭解更多關於新S.DS.AM命名空間:
Managing Directory Security Principals in the .NET Framework 3.5
3
使用System.DirectoryServices命名空間進行調查。您可以使用DirectorySearcher來查找用戶。一旦你的DirectoryEntry對象爲用戶做到這一點:
public List<string> GetMemberOf(DirectoryEntry de)
{
List<string> memberof = new List<string>();
foreach (object oMember in de.Properties["memberOf"])
{
memberof.Add(oMember.ToString());
}
return memberof;
}
這將返回字符串這是組名用戶的成員名單。
當然,您可以進一步優化以包含DirectorySearcher代碼,以便您可以傳遞函數samAccountName。
2
3
試試這個...
public override string[] GetRolesForUser(string username)
{
var allRoles = new List<string>();
var root = new DirectoryEntry(WebConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString,
ConnectionUsername,
ConnectionPassword);
var searcher = new DirectorySearcher(root,
string.Format(CultureInfo.InvariantCulture, "(&(objectClass=user)({0}={1}))",
AttributeMapUsername,
username));
searcher.PropertiesToLoad.Add("memberOf");
SearchResult result = searcher.FindOne();
if (result != null && !string.IsNullOrEmpty(result.Path))
{
DirectoryEntry user = result.GetDirectoryEntry();
PropertyValueCollection groups = user.Properties["memberOf"];
foreach (string path in groups)
{
string[] parts = path.Split(',');
if (parts.Length > 0)
{
foreach (string part in parts)
{
string[] p = part.Split('=');
if (p[0].Equals("cn", StringComparison.OrdinalIgnoreCase))
{
allRoles.Add(p[1]);
}
}
}
}
}
return allRoles.ToArray();
}
0
我認爲上面列出的大多數方法應該可以工作,但我會建議添加代碼以確保您的代碼可以「檢測嵌套組成員身份中的循環循環」,並且如果找到,可以打破您選擇的腳本可能潛入的任何無限循環。
2
我需要一種驗證用戶和檢查方法來查看它們是否在特定用戶組中。我通過推送用戶名和密碼並將「memberOf」屬性加載到「搜索」實例中來完成此操作。下面的示例將顯示該特定用戶名的所有組。 'catch'語句將捕獲錯誤的用戶名或密碼。
DirectoryEntry entry = new DirectoryEntry("LDAP://xxxxxxxx/OU=xxxxxxx,DC=xxxxxx,DC=xxxxx,DC=xxxxxx", strLdapUserName, strLdapPassword);
try
{
//the object is needed to fire off the ldap connection
object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(SAMAccountName=" + strLdapUserName + ")";
search.PropertiesToLoad.Add("memberOf");
SearchResult result = search.FindOne();
string filterAttribute = (String)result.Properties["cn"][0];
foreach(string groupMemberShipName in result.Properties["memberOf"])
{
Console.WriteLine("Member of - {0}", groupMemberShipName);
}
}
catch (Exception ex)
{
//failed to authenticate
throw new Exception(ex.ToString());
}
希望這會有所幫助。 (記得引用System.DirectoryServices)
相關問題
- 1. 爲特定用戶的用戶組查詢LDAP
- 2. 從jsp查詢LDAP
- 3. 期廣義LDAP查詢組
- 4. 組羣成員ldap查詢
- 5. 羣組中的LDAP查詢
- 6. Ldap和用戶組(要求ldap組)
- 7. LDAP查詢不顯示某些用戶
- 8. 團體查詢LDAP用戶屬於
- 9. LDAP查詢,檢索用戶有權訪問的所有組
- 10. LDAP查詢列出所有組用戶是的成員?
- 11. LDAP查詢列出某個組的所有用戶
- 12. ldap搜索過濾器查詢提取用戶組信息
- 13. 如何過濾包含特定用戶的組的LDAP查詢?
- 14. C#LDAP查詢檢索組織單位中的所有用戶
- 15. 查詢ldap檢索組用戶是(在sharepoint中)的成員
- 16. 在Perl中檢查用戶組Net :: LDAP
- 17. 返回組和父組的LDAP查詢
- 18. LDAP查詢以檢查用戶是否存在於組或子組中
- 19. 通過ruby net-ldap查詢LDAP用戶的更好方法?
- 20. 查詢LDAP進行組的詳細信息使用net-LDAP庫
- 21. 389-ds ldap - 從組中刪除用戶
- 22. Spring LDAP - 從組中刪除用戶
- 23. 如何從Java/JNDI向Windows用戶查詢LDAP電子郵件?
- 24. 從用戶的多個OU遞歸查詢LDAP角色
- 25. django-auth-ldap - 查找用戶是否屬於ldap組
- 26. LDAP查詢
- 27. 查詢LDAP
- 28. LDAP查詢
- 29. LDAP查詢
- 30. 綁定用戶用於LDAP查詢所需的用戶權限