我有以下代码来检索当前的活动目录用户:
public List<DomainContext> GetADUsers(string term=null)
{
List<DomainContext> results = new List<DomainContext>();
string ADServerName = System.Web.Configuration.WebConfigurationManager.AppSettings["ADServerName"];
using (var context = new PrincipalContext(ContextType.Domain, ADServerName))
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
var searchResults = searcher.FindAll();
foreach (Principal p in searchResults)
{
if (term == null || p.SamAccountName.ToString().ToUpper().StartsWith(term.ToUpper()))
{
DomainContext dc = new DomainContext();
dc.DisplayName = p.DisplayName;
dc.UserPrincipalName = p.UserPrincipalName;
dc.Name = p.Name;
dc.SamAccountName = p.SamAccountName;
results.Add(dc);
}
}
}
return results;
}
我目前的情况如下:
我正在开发机器上,ASP.NET MVC Web应用程序和Active Directory都在同一台机器上。
我没有传递用户名和密码来获取AD用户。
当我将包含上述代码的ASP.NET MVC Web应用程序移动到我的UAT服务器时,我有以下问题:
如果符合以下条件,原始代码也会有效:
答案 0 :(得分:2)
有两种可能性。
您可以将用户名/密码传递给PricipalContext,或者应用程序池的标识有足够的权限来查询AD,然后您不必提供用户名/密码。
如果应用程序服务器位于AD中,后者非常方便,因为代码和/或配置文件中没有用户名/密码。另一方面,如果应用程序服务器在AD中不,则以明确的方式传递用户名/密码是唯一可行的方法。