gpt4 book ai didi

c# - LDAPConnection 通过 NT 帐户检索用户

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:00 25 4
gpt4 key购买 nike

我正在使用 System.DirectoryServices.Protocols 库来查询 Active Directory。我有一个用例,我需要从服务器检索以用户的 NT 帐户名开头的用户条目(即:NETBIOSDomainName\UserSamAccountName)。这是我正在使用的代码:

LdapConnection connection = new LdapConnection(userDomain);
NTAccount userAccount = new NTAccount(userDomain, username);
sid = userAccount.Translate(typeof(SecurityIdentifier));

SearchRequest searchRequest = new SearchRequest
{
Scope = SearchScope.Subtree,
Filter = string.Format("(&(objectClass=user)(objectsid={0}))", sid)
};

SearchOptionsControl searchOptions = new SearchOptionsControl(SearchOption.PhantomRoot);
searchRequest.Controls.Add(searchOptions);

SearchResponse response = (SearchResponse)connection.SendRequest(searchRequest);

我遇到的问题是我不知道如何在搜索中包含 NetBIOSDomainName。如果我只是按用户的 samAccountName 进行搜索,我有时会在响应中得到多个条目,因为同一个 SAMAccountName 存在于多个域中。

有什么方法可以避免我正在使用的这种黑客攻击吗?

请注意,我必须使用这个特定的库。

最佳答案

如果您正在查询 ActiveDirectory,则使用 DirectoryServices .添加对 System.DirectoryServices.AccountManagement dll 的引用,然后您可以使用如下所示的示例。

目录服务将允许您轻松地将您的域设置为查找的一部分。以下示例返回 UserPrincipal可用于获取用户帐户的所有详细信息。检查msdn UserPrincipal 上的所有可用属性。

using System.DirectoryServices.AccountManagement;

public UserPrincipal FindUser(string username, string domain)
{
var context = new PrincipalContext(ContextType.Domain, domain);

var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username);

// user will be null if not found
// Remember to dispose UserPrincipal once done working with it.
return user;
}

关于c# - LDAPConnection 通过 NT 帐户检索用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25023110/

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