[英]Accessing Active Directory in ASP.NET?
我使用控制台应用程序编写一些测试代码:
/// <summary>
/// Returns AD information for a specified userID.
/// </summary>
/// <param name="ntID"></param>
/// <returns></returns>
public ADUser GetUser(string ntID)
{
DirectorySearcher search = new DirectorySearcher();
search.Filter = String.Format("(cn={0})", ntID);
search.PropertiesToLoad.Add("mail");
search.PropertiesToLoad.Add("givenName");
search.PropertiesToLoad.Add("sn");
search.PropertiesToLoad.Add("displayName");
search.PropertiesToLoad.Add("userPrincipalName");
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
return new ADUser(result);
}
这在控制台应用程序中运行良好。 但是,当我将其移动到ASP.NET应用程序时,我收到一条错误消息,指出不知道正确的域。
在ASPNET帐户上运行时,是否存在访问AD的技巧?
编辑 :只传递LDAP://域连接字符串是不够的,因为它需要一个实际的登录/密码。 因为它运行在计算机上的本地帐户上,所以我不确定要使用哪个AD L / P. 我可以以某种方式将访问用户帐户委托给它吗?
编辑#2 :当尝试使用身份模拟时,我得到一个DirectoryServicesCOMException:
是。 你需要给它一个目录连接字符串。 控制台应用程序(以您的身份运行)使用您的凭据运行,包括目录访问。 ASP.NET应用程序使用ASPNET用户的凭据运行,这些凭据是运行应用程序的系统的本地凭据,而不是目录全局的凭据。
或者,您可以在web.config中指定identity impersonate = true,并且对Active Directory的请求将作为调用用户而不是Machine \\ ASPNET发送
编辑:如果您收到身份验证错误,请参阅PIPTHEGEEK的帖子,您将不得不信任您的Web服务器以进行委派,但请注意信任委派(因为它会为安全类型打开另一个蠕虫病毒)。 您必须允许Web服务器将当前用户的凭据传递给AD。
如果可能,请转到计算机的AD属性,选择委派选项卡,然后选择“信任此计算机以委派任何服务(仅限Kerberos)
看看是否有效。 如果是这样,您可以使用指出的第三个选项进一步细化权限
“相信这台计算机只能委托给指定的服务”
然后选择“仅使用Kerberos”
并在“此帐户可以向其提供委派凭据的服务”中,添加相关的服务信息。
如果它是使用Windows身份验证的Intranet应用程序,则可以将AD调用包装在用户的模拟上下文中。
就像是:
using (((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate())
{
// Do your AD stuff here
}
最简单的方法是使您的Web应用程序池作为具有所需访问权限的域帐户运行。 这可以避免您必须管理密码的安全存储。 不要忘记使该帐户成为IIS_WPG本地组的成员。 如果您决定使用模拟,则必须配置Kerberos委派以及将ASP.NET配置更改为模拟。 这将涉及使应用程序池作为域帐户运行,授予该域帐户对委派凭据的权限(AD用户和计算机MMC中帐户属性的委派选项卡)。 然后确保将网站设置为在元数据库中使用negoiate(这是IIS6上的默认设置,不确定其他版本)并为新域帐户注册SPN。
编辑:您的“未知身份验证”错误听起来像是错误配置的委派。 检查您的应用程序池正在运行的帐户是否受委托信任,该IIS设置为仅使用Windows身份验证,并且为应用程序池标识帐户注册了有效的SPN。
您也可以尝试在登录中包含域名
adSharepointUsers = new DirectoryEntry("LDAP://MyDomain","MyDomain/ADUser","password");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.