Asp.net 使用PrincipalContext的限制&;DomainContext,用于检索Active directory用户

Asp.net 使用PrincipalContext的限制&;DomainContext,用于检索Active directory用户,asp.net,asp.net-mvc,asp.net-mvc-4,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我在asp.net mvc web应用程序模型类中添加了以下代码,以检索当前的广告用户:- public List<DomainContext> GetADUsers(string term=null) { List<DomainContext> results = new List<DomainContext>(); string ADServerName = System.Web.Config

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

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;
        }
公共列表GetADUsers(字符串项=null)
{
列表结果=新列表();
字符串ADServerName=System.Web.Configuration.WebConfigurationManager.AppSettings[“ADServerName”];
使用(var context=new PrincipalContext(ContextType.Domain,ADServerName))
使用(var searcher=newprincipalsearcher(newuserprincipal(context)))
{
var searchResults=searcher.FindAll();
foreach(搜索结果中的负责人p)
{
if(term==null | | p.SamAccountName.ToString().ToUpper().StartWith(term.ToUpper()))
{
DomainContext dc=新的DomainContext();
dc.DisplayName=p.DisplayName;
dc.UserPrincipalName=p.UserPrincipalName;
dc.Name=p.Name;
dc.SamAccountName=p.SamAccountName;
dc.differentiedName=p.differentiedName;
结果:添加(dc);
}
}
}
返回结果;
}
我现在在开发机器上,AD与asp.net mvc web应用程序运行在同一台机器上。无需提供用户名或密码即可访问广告。但关于在生产服务器上使用上述方法,我有以下问题:-

  • 如果AD和asp.net mvc(部署在IIS上)不在同一台机器上,那么同样的方法会很好地工作吗

  • 我是否能够提供访问active directory的用户名和密码

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

  • 谢谢你的帮助。
    关于

    我想您是在问,如果web服务器不属于Active Directory域,是否可以使用相同的代码。确实有用户名和密码重载,以允许使用凭据进行连接,而不是依赖具有足够权限从目录读取的计算机


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

    谢谢您的回复,但我应该在AD计算机或承载MVc web应用程序的计算机上创建服务帐户的位置?@johnG您需要在Active Directory中创建服务帐户,然后将该用户名和密码提供给
    PrincipalContext