Декларативные требования безопасности - SecurityAction.Demand кэшируется? - PullRequest
0 голосов
/ 05 мая 2009

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

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

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

1 Ответ

1 голос
/ 05 мая 2009

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

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

...