2013-10-01 3 views
1

У меня есть способ получить список групп AD, к которым принадлежит пользователь. Вот код:Ошибка UserPrincipal.FindByIdentity в Firefox

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; 
     } 

В обоих IE и Chrome, это может работать хорошо, но в Firefox, она всегда дает мне DirectoryServicesCOMException на user = UserPrincipal.FindByIdentity(yourDomain, userName); я даже не имеют ни малейшего представления, что это за исключением того, что есть. Может кто-нибудь объяснить мне, что такое ошибка и как ее исправить? Спасибо огромное!

+2

Как и в случае теста, попробуйте поместить эту строку внутри 'using (HostingEnvironment.Impersonate()) {...}' вызова и посмотреть, исправляет ли это это. Учетная запись, для которой работает пул приложений, будет иметь доступ к AD. – Pete

+0

Теперь он работает! Спасибо!!! Не могли бы вы объяснить это мне? – user2701646

+0

Почему это работает для IE и Chrome, но не для Firefox? – RobSiklos

ответ

1

Измените вызов выглядеть следующим образом:

using (HostingEnvironment.Impersonate()){ 
    user = UserPrincipal.FindByIdentity(yourDomain, userName); 
} 

Вам нужно будет убедиться, что ваш пул приложений имеет разрешение AD. Это будет выполнять базовый вызов AD, используя учетные данные среды хостинга (идентификатор пула веб-приложений) вместо учетных данных пользователя, у которых могут не быть разрешения на запрос сервера AD.

Смежные вопросы