2011-07-26 3 views
2

아래 코드를 사용하여 주어진 사용자가 AD의 메일 그룹에 속하는지 여부를 확인합니다.사용자가 AD에서 메일 그룹/보안 그룹의 구성원인지 여부를 확인하는 방법 C#

static bool IsUserMemberOf(string userName, string groupName) 
{ 
    using (var ctx = new PrincipalContext(ContextType.Domain)) 
    using (var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 
    using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName)) 
    { 
    return userPrincipal.IsMemberOf(groupPrincipal); 
    } 
} 

제가 IsUserMemberOf("domain\\username","domain\\groupname") 값으로 상기 방법 부르고하지만 groupPrincipal가 널값을 갖는 때문에 널 포인터 예외를 참조.

이와 관련하여 도움이 필요하십니까? 그룹 도메인에 존재하지 않기 때문에

groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 

는 널 포인터를 반환

+1

코드는 내 시스템에서 작동합니다. 도메인 \\ groupname이 사용중인 컨텍스트의 유효한 그룹입니까? 'ctx.ConnectedServer'를 검사하여 연결하려는 도메인에 연결되어 있는지 확인하는 것이 좋습니다. 다른 그룹 이름을 사용하여 코드가 실패했는지 확인해 볼 수도 있습니다. 'userPrincipal.GetGroups()'함수는 사용할 수있는 이름 목록을 제공합니다. –

+0

나는 또한 귀하의 코드를 시도하고 그것은 나를 위해 잘 작동합니다. 사용자 이름과 그룹 이름에서 \\ 부분을 생략했습니다. –

+0

또한 사용자가 그룹과 동일한 도메인에 있지 않을 가능성이 있습니까? 이 경우 귀하의 방법은 작동하지 않습니다. 불행히도이 문제에 대한 해결책이 없습니다. 나는 비슷한 문제를 겪었고 충분한 답을 찾지 못했습니다. 실제로 사용자 이름과 그룹 이름이 동일한 도메인에있는 경우 – RLH

답변

0

실제로 내 그룹은 내가 묻는 사용자와 다른 도메인에 있습니다. 아래 프로그램을 변경하고 지금 작업하고 있습니다.

와 나는 같은 호출 오전 :

IsUserMemberOf("domain1\\username","domain2\\groupname") 


static bool IsUserMemberOf(string userName, string groupName) 
{ 
using (var ctx = new PrincipalContext(ContextType.Domain,"domain1")) 
using (var groupPrincipal = GroupPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain,"domain2"), groupName)) 
using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName)) 
{ 
    return userPrincipal.IsMemberOf(groupPrincipal); 
} 

}

1

단지 것을 의미합니다. var ctx, userPrincipalgroupPrincipal을 테스트하면됩니다.