0

我在我的 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 回答 1

1

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

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

于 2013-11-11T16:37:59.183 回答