使用PrincipalContext&的限制; DomainContext,用于检索Active Directory用户

时间:2013-11-11 16:26:28

标签: asp.net asp.net-mvc asp.net-mvc-4

我在asp.net mvc Web应用程序模型类中添加了以下代码,以检索当前的AD用户: -

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 ;
                    dc.DistinguishedName =     p.DistinguishedName;

                    results.Add(dc);

                }
                }
            }
            return results;
        }

我现在在开发机器上,其中AD与asp.net mvc Web应用程序运行在同一台机器上。并且无需提供用户名或密码即可访问AD。但是我在生产服务器上使用上述方法有以下问题: -

  1. 如果AD和asp.net mvc(部署在IIS上)不在同一台机器上,那么相同的方法是否会运行良好?

  2. 我是否可以提供用户名和密码来访问活动目录?

  3. 为了能够允许Domaincontext类访问远程服务器上的AD,我应该达到哪些一般要求?

  4. 谢谢我提前寻求帮助。 此致

1 个答案:

答案 0 :(得分:1)

我认为如果Web服务器不是Active Directory域的一部分,您会问是否能够使用相同的代码。 PrincipalContext确实有用户名和密码的重载,以允许使用凭据进行连接,而不是依赖具有足够权限的计算机从目录中读取。

至于权限,尽可能少地授予。我会让你的系统管理员参与创建一个帐户。您可以使用Windows Server 2008中引入的服务帐户来进行身份验证。