2013-10-01 3 views
1

사용자가 속한 AD 그룹 목록을 검색하는 방법이 있습니다. 여기에 코드입니다 : IE와 크롬 모두에서Firefox에서 UserPrincipal.FindByIdentity 오류가 발생했습니다.

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

이 잘 작동 할 수 있지만, 파이어 폭스에서 항상 내게 짝수 예외 어떤 종류의 어떤 생각이없는 user = UserPrincipal.FindByIdentity(yourDomain, userName);에 DirectoryServicesCOMException을 제공합니다. 누군가가 내게 오류가 무엇이며 그것을 고칠 방법을 설명 할 수 있습니까? 정말 고맙습니다!

+2

테스트와 마찬가지로'using (HostingEnvironment.Impersonate()) {...}'호출 내에 해당 행을 넣고 수정하는지 확인하십시오. 앱 풀에서 실행중인 계정에 AD 액세스가 필요합니다. – Pete

+0

이제 작동합니다 !! 고맙습니다!!! 그걸 내게 설명해 주겠니? – user2701646

+0

IE와 Chrome에서는 작동하지만 Firefox에서는 작동하지 않는 이유는 무엇입니까? – RobSiklos

답변

1
는 다음과 같이보고 전화를 변경

:

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

당신은 당신의 응용 프로그램 풀 AD 권한이 있는지 확인해야합니다. 이렇게하면 AD 서버를 쿼리 할 수있는 권한이없는 사용자의 자격 증명 대신 호스팅 환경의 자격 증명 (웹 응용 프로그램 풀 ID)을 사용하여 기본 AD 호출이 수행됩니다.

관련 문제