문제

사용자를 가장하는 동안 문제가 있습니다. 다음과 같은 방법이 있습니다.

[PrincipalPermission(SecurityAction.Demand, Name=@"DJPITER-PC\Test", Role="LocalTestGroup")]
static void LocalTestGroupOnly()
{
    Console.WriteLine("Inside LocalTestGroupOnly() - {0}", 
        WindowsIdentity.GetCurrent().Name);
}

호출 코드는 다음과 같습니다.

WindowsImpersonationContext context = 
        WindowsIdentity.Impersonate(token);

    Console.WriteLine("Calling LocalTestGroupOnly() as {0}", 
        WindowsIdentity.GetCurrent().Name);
    LocalTestGroupOnly();

    context.Undo();

    try
    {
        // Reverted user is displayed properly 
        Console.WriteLine("Calling LocalTestGroupOnly() as {0}", 
            WindowsIdentity.GetCurrent().Name);

        // This method should fail but if succeeds
        LocalTestGroupOnly();
    }
    catch (SecurityException ex)
    {
        Console.WriteLine("Your account lacks permission to that function.");
    }

기본 사용자는 LocalTestGroup의 구성원이 아닙니다. Token으로 표시된 사용자는 LocalTestGroup의 회원입니다.

문제 :

LocalTestGroupOnly ()에 대한 첫 번째 호출은 토큰으로 표시된 사용자가 LocalTestGroup의 회원이기 때문에 성공합니다. LOCALTESTGROUPONLY ()에 대한 두 번째 호출 (기본 사용자로서)은 기본 사용자가 '테스트'가 아니며 LOCALTESTGROUP에 속하지 않기 때문에 실패해야합니다. 문제는이 방법이 성공한다는 것입니다.

제가 프로그램을 별도로 실행하는 경우 - 가장 유무에 관계없이 우리 미국의 행동 : '테스트'로 가장 할 때 성공하고 기본 사용자로 호출 할 때 실패합니다.

여기서 문제는 무엇입니까?

도움이 되었습니까?

해결책

확인해 주시겠습니까? Thread.CurrentPrincipal.Identity 대신에 WindowsIdentity.GetCurrent()? PrincipalPermission.Demand() 첫 번째를 사용합니다.

바꾸다 Thread.CurrentPrincipal (또는 HttpContext.User) 가장 한 후 또는 실행 취소 후 명시 적으로 설정 해야하는 것 같습니다. 확인하다 여기 비슷한 질문을 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top