gpt4 book ai didi

c# - 无法在 C# 中检索 Active Directory 用户

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:09 26 4
gpt4 key购买 nike

我在 Window 2008 中构建了一个测试 Active Directory 服务器,并且还在其上运行了 DNS 服务器。在运行 C# 应用程序的客户端计算机上,我可以使用以下函数根据 Active Directory 服务器对用户进行身份验证:

public static UserPrincipal GetUserPrincipal(string usrName,string pswd,string domainName)
{
UserPrincipal usr;
PrincipalContext ad;

// Enter Active Directory settings
ad = new PrincipalContext(ContextType.Domain, domainName,usrName,pswd);

//search user
usr = new UserPrincipal(ad);
usr.SamAccountName = usrName;

PrincipalSearcher search = new PrincipalSearcher(usr);
usr = (UserPrincipal)search.FindOne();
search.Dispose();
return usr;
}

在一个单独的逻辑中,我尝试使用用户名从服务器检索用户。我使用了以下功能:

public static DirectoryEntry CreateDirectoryEntry()
{
// create AD connection
DirectoryEntry de = new DirectoryEntry("LDAP://CN=Users,DC=rootforest,DC=com","LDAP","password");
de.AuthenticationType = AuthenticationTypes.Secure;
return de;
}

public static ResultPropertyCollection GetUserProperty(string domainName, string usrName)
{
DirectoryEntry de = CreateDirectoryEntry();
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(SamAccountName=" + usrName + ")";
SearchResult results = deSearch.FindOne();

return null;
}

但是,我根本没有从 LDAP 服务器返回任何响应,甚至没有异常。我是否缺少 LDAP 服务器上的某些设置,你们中的任何一个都能看到我的代码中的缺陷(请不要介意硬代码值,我正在使用此代码进行测试)。

作为故障排除的一部分,我确认我可以从客户端计算机 ping 到 rootforest.com。我确认具有属性 samaccountname“LDAP”的用户存在。我的路径似乎是正确的,因为当我进入 LDAP 服务器并键入:

dsquery user -name LDAP*      

我得到了以下信息:

CN=LDAP L. LDAP,CN=Users,DC=rootforest,DC=com

任何帮助将不胜感激,我一天的大部分时间都在排除故障和研究这个小问题,我认为它可能是我忽略的小问题。

最佳答案

我不明白为什么你在第一个例子中使用新的 PrincipalContext/UserPrincipal 东西,但是又回到你的例子中难以使用的 DirectoryEntry 东西第二个例子……没有意义……还有:你的第二个函数 GetUserProperty 似乎返回 null always - 错字或不是吗??

因为您已经在使用 System.DirectoryServices.AccountManagement (S.DS.AM) 命名空间 - 也将它用于您的第二个任务!在这里阅读所有相关信息:

基本上,您可以定义域上下文并在 AD 中轻松找到用户和/或组:

public static ????? GetUserProperty(string domainName, string usrName)
{
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, usrName);

if(user != null)
{
// return what you need to return from your user principal here
}
else
{
return null;
}
}

新的 S.DS.AM 使得在 AD 中与用户和组一起玩变得非常容易:

关于c# - 无法在 C# 中检索 Active Directory 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8071882/

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