C# 我是否可以在不知道OU'的情况下通过某些属性获取特定用户;在Active Directory(AD)中有什么?
我需要得到一个只知道“sAMAAccountName”字段的特定用户 问题是,这个特定用户可以在许多组中:C# 我是否可以在不知道OU'的情况下通过某些属性获取特定用户;在Active Directory(AD)中有什么?,c#,.net,active-directory,ldap,C#,.net,Active Directory,Ldap,我需要得到一个只知道“sAMAAccountName”字段的特定用户 问题是,这个特定用户可以在许多组中: OU=ThirdParty OU=Company1 CN=User1 CN=User2 CN=User3 OU=Company2 CN=User1 CN=User2 CN=User3 有没有办法让用户不知道他们的组,只使用他们拥有的一个属性 我的代码: Dire
OU=ThirdParty
OU=Company1
CN=User1
CN=User2
CN=User3
OU=Company2
CN=User1
CN=User2
CN=User3
有没有办法让用户不知道他们的组,只使用他们拥有的一个属性
我的代码:
DirectorySearcher search = new DirectorySearcher(_path);
search.Filter = "(&(objectCategory=person)(objectClass=User))";
StringBuilder groupNames = new StringBuilder();
try
{
SearchResultCollection result = search.FindAll();
.....
}
谢谢
编辑:
好的,我是用这个代码得到的:
DirectorySearcher search = new DirectorySearcher(_entry, "(sAMAccountName=" + userCode + ")");
关于用户,您需要了解哪些信息?我们过去使用过这种类型的代码来检索有关用户的信息
using (var identity = new WindowsIdentity(username))
{
var user = new WindowsPrincipal(identity);
if (user.IsInRole("Some Role Name"))
return true;
return false;
}
编辑
在你发表评论之后,我想知道这篇文章是否能为你提供更多的信息。因此,它们显示获取您请求的字段,我不确定检索员工的代码是否适用于您,因为这是指InfoPath:如果切换到
System.DirectoryServices.AccountManagement
,那么您会发现API实际上要简单得多
例如:
public something FindUserByUserName( string UserName )
{
using ( var searcher =
new PrincipalSearcher( new UserPrincipal( ConfigurationContext ) { Name = UserName } ) )
{
var item = searcher.FindOne();
// do whatever you want with the found object and return it
}
}
其中,ConfigurationContext
是一个属性,返回PrincipalContext
(连接到AD的凭据,类似于“连接字符串”)尝试以下操作:
public static List<string> GetADUserInfo(string login)
{
//Using Hosting.HostingEnvironment.Impersonate()
List<string> info = new List<string>();
PrincipalContext infPC = new PrincipalContext(ContextType.Domain, "domain", "login", "password");
UserPrincipal infUP = new UserPrincipal(infPC);
PrincipalSearcher infPS = new PrincipalSearcher();
UserPrincipal foundUP;
infUP.SamAccountName = login;
infPS.QueryFilter = infUP;
foundUP = infPS.FindOne();
if (foundUP != null) {
info.Add(foundUP.SamAccountName.ToLower);
info.Add(foundUP.GivenName);
info.Add(foundUP.Surname);
info.Add(foundUP.EmailAddress.ToLower);
return info;
}
return null;
}
公共静态列表GetADUserInfo(字符串登录)
{
//使用Hosting.HostingEnvironment.Impersonate()
列表信息=新列表();
PrincipalContext infPC=新PrincipalContext(ContextType.Domain,“域”、“登录”、“密码”);
UserPrincipal infUP=新的UserPrincipal(infPC);
PrincipalSearcher infPS=新PrincipalSearcher();
他被抛弃了;
infUP.SamAccountName=登录名;
infPS.QueryFilter=infUP;
foundUP=infPS.FindOne();
if(foundUP!=null){
info.Add(foundUP.SamAccountName.ToLower);
info.Add(foundUP.GivenName);
信息添加(foundUP.姓氏);
info.Add(foundUP.EmailAddress.ToLower);
退货信息;
}
返回null;
}
我需要知道“physicalDeliveryOfficeName”字段,不知道这是否相关。我会试试你的密码!谢谢添加了一个指向有关infopath的msdn文章的链接,在该文章中,他们似乎正在获取physicalDeliveryOfficeName
,您也可以查看一下。谢谢!这个链接有答案!在Anthony Shaw link中,有一个例子,完全符合我的要求!谢谢