2

我有以下代码来检索当前的活动目录用户:

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;
}

我目前的情况如下:

  1. 我正在开发机器上工作,其中 ASP.NET MVC Web 应用程序和 Active Directory 都在同一台机器上。

  2. 我没有通过用户名和密码来获取 AD 用户。

因此,当我将包含上述代码的 ASP.NET MVC Web 应用程序移动到我的 UAT 服务器时,我有以下担忧:

  1. 在 UAT 服务器上,ASP.NET MVC Web 应用程序和 AD 将位于两台不同的机器上。
  2. 要从某台机器访问 AD,我可能需要向 AD 服务器发送用户名和密码。

如果出现以下情况,我的原始代码也会起作用:

  1. AD 和 ASP.NET MVC Web 应用程序在不同的机器上?
  2. 如果 AD 服务器需要同时传递用户名和密码?
4

1 回答 1

2

有两种可能性。

要么将用户名/密码传递给 PricipalContext,要么应用程序池的身份有足够的权限来查询 AD,然后您不必提供用户名/密码。

如果应用服务器在 AD 中,后者非常方便,因为代码和/或配置文件中没有用户名/密码。另一方面,如果应用程序服务器不在AD 中,则以显式方式传递用户名/密码是唯一可行的方法。

于 2013-12-06T17:16:20.560 回答