如何使用C#按用户名搜索Active Directory?

spe*_*der 5 c# active-directory

我正在尝试使用用户名"admin"搜索活动目录.我知道在目录中有一个用户使用该用户名的事实,但搜索一直没有回来.

var attributeName = "userPrincipalName";
var searchString = "admin"
var ent = new DirectoryEntry("LDAP://"dc=corp,dc=contoso,dc=com")
var mySearcher = new DirectorySearcher(ent);
mySearcher.Filter = string.Format("(&(objectClass=user)({0}={1}))", attributeName, searchString);

var userResult = mySearcher.FindOne();
Run Code Online (Sandbox Code Playgroud)

userResult总是以null结尾.我很想知道为什么,必须有一些我不知道的东西.

mar*_*c_s 7

如果您使用的是.NET 3.5及更高版本,则应该查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间.在这里阅读所有相关内容:

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

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

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

if(user != null)
{
   // do something here....     
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,您将通过以下属性搜索该用户:

  • DistinguishedName :标识是专有名称(DN).
  • Guid:标识是全局唯一标识符(GUID).
  • Name:身份是一个名字.
  • SamAccountName:标识是安全帐户管理器(SAM)名称.
  • Sid:标识是安全描述符定义语言(SDDL)格式的安全标识符(SID).
  • UserPrincipalName:标识是用户主体名称(UPN).

新的S.DS.AM使得在AD中与用户和群组玩游戏变得非常容易!


spe*_*der 4

事实证明,“userPrincipalName”需要全部小写(“userprincipalname”)。很高兴知道,感谢您的回复。