我在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。但是我在生产服务器上使用上述方法有以下问题: -
如果AD和asp.net mvc(部署在IIS上)不在同一台机器上,那么相同的方法是否会运行良好?
我是否可以提供用户名和密码来访问活动目录?
为了能够允许Domaincontext类访问远程服务器上的AD,我应该达到哪些一般要求?
谢谢我提前寻求帮助。 此致
答案 0 :(得分:1)
我认为如果Web服务器不是Active Directory域的一部分,您会问是否能够使用相同的代码。 PrincipalContext
确实有用户名和密码的重载,以允许使用凭据进行连接,而不是依赖具有足够权限的计算机从目录中读取。
至于权限,尽可能少地授予。我会让你的系统管理员参与创建一个帐户。您可以使用Windows Server 2008中引入的服务帐户来进行身份验证。