선언적 보안 요구 - SecurityAction.demand가 캐시 되었습니까?
-
03-07-2019 - |
문제
사용자를 가장하는 동안 문제가 있습니다. 다음과 같은 방법이 있습니다.
[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
) 가장 한 후 또는 실행 취소 후 명시 적으로 설정 해야하는 것 같습니다. 확인하다 여기 비슷한 질문을 위해.
제휴하지 않습니다 StackOverflow