У меня проблемы с выдачей себя за пользователя. У меня есть метод, объявленный так:
[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.
Пользователь, указанный токеном, является членом LocalTestGroup.
Проблема:
Первый вызов LocalTestGroupOnly () выполнен успешно, поскольку пользователь, указанный маркером IS, является членом LocalTestGroup. Второй вызов (как пользователь по умолчанию) к LocalTestGroupOnly () должен завершиться неудачей, поскольку пользователь по умолчанию не является «Test» и не принадлежит LocalTestGroup. Проблема в том, что этот метод также успешен.
Если я запускаю программу отдельно - с олицетворением и без него, то поведение будет правильным: оно будет успешным при олицетворении «Test» и завершится неудачно при вызове пользователя по умолчанию.
В чем здесь проблема?