gpt4 book ai didi

c# - 按公司名称过滤 Active Directory 用户,Asp.net Core 2.1

转载 作者:行者123 更新时间:2023-12-02 01:19:15 26 4
gpt4 key购买 nike

问题

我正在寻找一种方法,根据当前登录用户的 Active Directory 公司名称(通过 AD 配置文件找到)从 Active Directory 中过滤用户。

要搜索 AD,我当前使用以下代码,该代码返回所有用户,包括系统帐户 -

PrincipalContext context = new PrincipalContext(ContextType.Domain, "mydomain");
var domainUsers = new List<string>();
var userPrincipal = new UserPrincipal(context);

using (var search = new PrincipalSearcher(userPrincipal))
{
foreach (var user in search.FindAll())
{
if (user.DisplayName != null)
{
domainUsers.Add(user.DisplayName);
}
}
}

我正在寻找一种方法来仅返回与当前 AD 登录用户的公司名称匹配的用户。即,如果公司名称为 Test123,则搜索结果将仅包括属于 Test123 公司的所有其他用户。

背景

我正在开发一个 ASP.NET MVC 2.1 Web 应用程序,它需要 Active Directory 中的用户下拉列表。

最佳答案

Search All users in Active Directory and match against company field.

在迭代根据查询找到的所有用户的列表时,您可以将 Principal 转换为 DirectoryEntry,因为Principal 没有您需要的信息。 DirectoryEntry 具有您可以在过滤方面查找和使用的属性。本示例中仅使用“公司”。

    PrincipalContext context = new PrincipalContext(ContextType.Domain, "mydomain");
var domainUsers = new List<string>();
var userPrincipal = new UserPrincipal(context);
string myCompany = "Test123";
using (var search = new PrincipalSearcher(userPrincipal))
{
foreach (Principal user in search.FindAll())
{
string usersCompany = ((DirectoryEntry)user.GetUnderlyingObject())?.Properties["company"]?.Value?.ToString();
if (user.DisplayName != null && usersCompany != null && usersCompany.Equals(myCompany))
{
domainUsers.Add(user.DisplayName);
}
}
}

编辑

出于性能原因,我建议使用 DirectorySearcher 而不是使用 PrincipalSearcher。这是另一个版本。搜索在执行 FindAll() 之前完成。

    string myCompany = "Test123";
string searchQuery = $"(&(objectCategory=user)(objectClass=user)(company={myCompany}))";

// You can define the fields you want retrieved from AD (Noted by @GabrielLuci)
DirectorySearcher ds = new DirectorySearcher(searchQuery,
new string[] { "DisplayName" });
foreach(SearchResult user in ds.FindAll())
{
domainUsers.Add(user.Properties["DisplayName"][0].ToString());
}

关于c# - 按公司名称过滤 Active Directory 用户,Asp.net Core 2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59933584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com