2012-08-06 1 views
0

양방향 트러스트로 설정된 두 개의 도메인이 있습니다.Active Directory 도메인에서 User.IsInRole()을 사용하여 그룹 구성원 확인

도메인 A에는 회원 (사용자 A)이있는 그룹 (그룹 A)이 있습니다.

도메인 B는 (다른 도메인의) 그룹 A와 그룹 (그룹 B)을 구성원으로 갖습니다.

나는 함께 확인 해요 :

if(User.IsInRole(group B)) 
{ 
    // logging in as User A should provide access because this use is part of Group A which is part of Group B 
} 

하지만 작동하지 않습니다.

무엇이 여기에 있습니까?

+0

어떻게 'groupB'를 지정 했습니까? 이름으로 지정 했습니까? 아니면 SecurityIdentifier에서 지정 했습니까? SecurityIdentifier –

+0

의 사용을 시도해보십시오. 그룹 B는 보조 도메인 (도메인 B)의 "대상"그룹입니다. 그룹 A (기본 도메인에서)는 그룹 B 안에 중첩되어 있습니다. – user1154725

+0

'IsInRole'의 여러 버전이 있습니다. 그들 중 하나는'string'을 매개 변수로받습니다. 또 다른 하나는'SecurityIdentifier'를 매개 변수로 받아들입니다. groupB의 유형은 무엇입니까? –

답변

0

사용자로 로그인하여 해당 도메인에 가입 한 컴퓨터에서 실행하면 실패합니다.

 private static SecurityIdentifier GetGroupSid(string domainName, string groupName) 
    { 
     using (var d = Domain.GetDomain(new DirectoryContext(DirectoryContextType.Domain, domainName))) 
     { 
      using (var context = new PrincipalContext(ContextType.Domain, d.Name)) 
      { 
       using (var group = GroupPrincipal.FindByIdentity(context, groupName)) 
       { 
        return group.Sid; 
       } 
      } 
     } 
    } 
    [Test] 
    public void should_check_role_with_sid() 
    { 

     var barDomain = "bar.example.com"; 
     var groupinBar = GetGroupSid(barDomain, "group_in_bar"); 
     var identity = WindowsIdentity.GetCurrent(); 
     var windowsPrincipal = new WindowsPrincipal(identity); 
     Assert.That(windowsPrincipal.IsInRole(groupinBar), Is.True, "Checking role " + groupinBar); 
    }