, 내가 UserPrincipal.GetAuthorizationGroups 정말 쉽게 말을 할 수있는 (쉬운) 방법을 찾을 수 있습니다. 유일한 것은 .NET 3.5 이상에서만 찾을 수 있다는 것입니다.
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "YourUser"))
{
foreach (Principal p in user.GetAuthorizationGroups())
{
Console.WriteLine(p.Name);
}
}
}
GetAuthorizationGroups
은 잘 알려진 SID를 포함하여 모든 중첩 그룹을 반환합니다. 중첩 된 그룹 정보를 검색하는 여러 가지 방법을 시도합니다. 실제로 사용 된 접근 방법 중 하나는 DirectoryEntry
을 사용하여 tokenGroups
속성에 액세스하는 것입니다.
UPDATE
는 현재 사용자가 NT AUTHORITY\INTERACTIVE
또는 LOCAL
, 우리는 토큰 직접 현재 로그온을 검색 WindowsIdentity.Groups
를 사용할 수 있는지 여부를 확인합니다. NT AUTHORITY\INTERACTIVE
및 LOCAL
의 멤버십은 런타임에 결정됩니다. 사용자는 해당 시스템에 지금 로그온하고 있다는 사실을 기반으로 이러한 그룹에 할당됩니다. 마찬가지로 내 Windows 7에서 원격 데스크톱을 통해 로그온했기 때문에 현재 로그온 사용자도 NT AUTHORITY\REMOTE INTERACTIVE LOGON
의 구성원임을 알 수 있습니다.
WindowsIdentity id = WindowsIdentity.GetCurrent();
foreach (var group in id.Groups)
{
Console.WriteLine(((NTAccount)group.Translate(typeof(NTAccount))).Value);
}
은 내가 어떤 임의의 사용자에 대한 NT AUTHORITY\INTERACTIVE
회원 자격을 얻을 수있는 방법을 몰라 죄송합니다. 이러한 유형의 그룹 구성원은 런타임에 해당 사용자가 실제로 로그온하는 경우에만 결정되기 때문에 그러한 방법이 없다고 생각합니다.
감사합니다. Harvey에게 솔루션에는 거의 모든 것이 포함되어 있습니다. 그것은 여전히 (로컬, 콘솔 로그온, NT AUTHORITY \ INTERACTIVE ...) 일부 SID가 여전히 누락되었습니다. 어떻게 그 아이디어를 얻을 수 있을까요? –
@Marcel 업데이트 된 답변을 확인하십시오 –
감사합니다 Harvey, 귀하의 예와 설명이 완벽 이상입니다. –