Декларативные требования безопасности - SecurityAction.Demand кэшируется?

StackOverflow https://stackoverflow.com/questions/821938

Вопрос

У меня проблемы с выдачей себя за пользователя. У меня есть метод, объявленный так:

[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» и не при вызове в качестве пользователя по умолчанию.

В чем здесь проблема?

Это было полезно?

Решение

Не могли бы вы проверить Thread.CurrentPrincipal.Identity вместо WindowsIdentity.GetCurrent () ? PrincipalPermission.Demand () использует первое.

Чтобы изменить Thread.CurrentPrincipal (или HttpContext.User ), кажется, что вы должны установить их явно после олицетворения или после отмены. Проверьте здесь для аналогичного вопроса .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top