2009-08-24 7 views
4

기본적으로 내가하고 싶은 것은 ActiveDirectory (매우 유사하게 this 작동 방식)와 연결할 사용자 지정 코드로 폼 인증을 사용하는 ASP.Net 웹 응용 프로그램이 있습니다.C# ActiveDirectory LDAP 그룹 쿼리

그러나 도메인 컨트롤러에 사용자 그룹을 쿼리 할 때마다 명시 적으로 있고 하위 그룹이 아닌 그룹 만 반환합니다 (id est, 사용자가 속한 특정 보안 그룹, 예를 들어 그룹 A, 내가 원하는 그룹의 구성원, 예를 들어 그룹 B, 사용자가 그룹 A에 명시 적으로 있지만 A 그룹이 그룹 B의 구성원이기 때문에 그룹 B에만 암시 적으로 있음).

나는 tokenGroups 쿼리를 읽었으니 여기서 도움이 될 수 있지만 현재는 해당 데이터를 구문 분석 할 방법이 없습니다.

그러나 가장 바람직한 방법은 LDAP 쿼리를 통해 특정 그룹을 전달할 수 있으며 해당 그룹 내에 해당 사용자가있을 경우 도메인 컨트롤러에서 부울 (true/false)을 부여하는 것입니다.

제안 사항?

답변

4

예, "보통"user.Properties["memberOf"]은 직접 회원 자격 만 반환합니다.

당신은 그러나 .NET 3.5을 사용하는 경우, 당신은 더 현대적인 "- 주요 기반"방법을 사용할 수 있습니다

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    using(Principal p = Principal.FindByIdentity(ctx, "yourUserName")) 
    { 
     var groups = p.GetGroups(); 

     using (groups) 
     { 
      foreach (Principal group in groups) 
      { 
       Console.WriteLine(group.SamAccountName + "-" + group.DisplayName); 
      } 
     } 
    } 
} 

이 방법 (이하 "System.DirectoryServices.AccountManagement"어셈블리에 대한 참조를 추가 프로젝트에) 사용자의 기본 그룹과 중첩 된 그룹 멤버쉽도 함께 제공해야합니다.

.NET 2.0/3.0을 사용 중이며 위로 이동할 수없는 경우 "tokenGroups"속성을 읽는 방식을 사용하는 것이 가장 좋은 방법입니다. Ryan Dunn의 뛰어난 기능에 대해 자세히 알아보십시오. 블로그 게시물, Enumerating Token Groups (tokenGroups) in .NET.

마크

+0

tokenGroups 메소드는 완벽하게 작동했습니다. 불행히도 우리는 3.5가 아니기 때문에 새로운 방법을 시도 할 수는 없지만 tokenGroups 설정에 대해 제공 한 링크는 훌륭하게 작동했습니다. 감사. –

+0

기꺼이 도와 줘, 타일러! –