C# Firefox中的UserPrincipal.FindByIdentity错误
我有一个方法来检索用户所属的广告组列表。代码如下:C# Firefox中的UserPrincipal.FindByIdentity错误,c#,asp.net-mvc-4,authentication,principalcontext,C#,Asp.net Mvc 4,Authentication,Principalcontext,我有一个方法来检索用户所属的广告组列表。代码如下: public static List<GroupPrincipal> GetGroups(string userName) { List<GroupPrincipal> result = new List<GroupPrincipal>(); // establish domain context PrincipalCo
public static List<GroupPrincipal> GetGroups(string userName)
{
List<GroupPrincipal> result = new List<GroupPrincipal>();
// establish domain context
PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain);
UserPrincipal user = null;
// find your user
user = UserPrincipal.FindByIdentity(yourDomain, userName);
// if found - grab its groups
if (user != null)
{
PrincipalSearchResult<Principal> groups = user.GetGroups();
// iterate over all groups
foreach (Principal p in groups)
{
// make sure to add only group principals
if (p is GroupPrincipal)
{
result.Add((GroupPrincipal)p);
}
}
}
return result;
}
公共静态列表GetGroups(字符串用户名)
{
列表结果=新列表();
//建立域上下文
PrincipalContext yourDomain=新PrincipalContext(ContextType.Domain);
UserPrincipal user=null;
//查找您的用户
user=UserPrincipal.FindByIdentity(您的域,用户名);
//如果找到-抓取它的组
如果(用户!=null)
{
PrincipalSearchResult groups=user.GetGroups();
//迭代所有组
foreach(组中的主体p)
{
//确保只添加组主体
if(p是GroupPrincipal)
{
结果。添加((GroupPrincipal)p);
}
}
}
返回结果;
}
在IE和Chrome中,这都可以很好地工作,但在Firefox中,它总是在
user=UserPrincipal.FindByIdentity(yourDomain,userName)上给我DirectoryServicesComeException我甚至不知道这是什么样的异常。有人能解释一下错误是什么以及如何修复它吗?非常感谢你 将调用更改为如下所示:
using (HostingEnvironment.Impersonate()){
user = UserPrincipal.FindByIdentity(yourDomain, userName);
}
您需要确保应用程序池具有AD权限。这将使用宿主环境的凭据(web应用程序池标识)而不是用户的凭据执行底层AD调用,用户可能没有查询AD服务器的权限。作为测试,请尝试使用(HostingEnvironment.Impersonate()){…}
调用将该行放入中,然后查看是否修复了它。运行应用程序池的帐户将需要广告访问。它现在可以工作!!非常感谢。你能给我解释一下吗?为什么它适用于IE和Chrome,而不适用于Firefox?不太确定为什么,当我使用IE和Chrome时,它可以找到用户刚才找到的,但如果我使用Firefox,它会给我一个期望。所有3个浏览器在如何向web服务器传递凭据方面都有点不同。我不记得Firefox到底有什么不同,但我记得我们必须将它与其他浏览器分开使用。。。