Frage

Ich habe ein Problem während eines Benutzeridentitätswechsel. Ich habe eine Methode wie folgt erklärt:

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

Die Telefonvorwahl lautet:

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.");
    }

Standardbenutzer ist nicht Mitglied in LocalTestGroup. Benutzer, die durch Token ist Mitglied LocalTestGroup.

Das Problem:

Der erste Aufruf von LocalTestGroupOnly () erfolgreich, weil Benutzer durch das Token angegeben ist Mitglied LocalTestGroup. Der zweite Aufruf (als Standardbenutzer) zu LocalTestGroupOnly () soll fehlschlagen, weil der Standardbenutzer nicht ‚Test‘ ist, und es gehört nicht zu LocalTestGroup. Das Problem ist, dass diese Methode erfolgreich ist auch.

Wenn ich das Programm ausführen separat - mit und ohne Identitätswechsel des Verhalten uns richtig. Es gelingt, wenn sie als ‚Test‘ Identitätswechsel und schlägt fehl, wenn sie als Standardbenutzer Aufruf

Was ist das Problem hier?

War es hilfreich?

Lösung

Könnten Sie überprüfen Thread.CurrentPrincipal.Identity statt WindowsIdentity.GetCurrent()? PrincipalPermission.Demand() verwendet die erste.

So ändern Thread.CurrentPrincipal (oder HttpContext.User) scheint es, dass man sie explizit nach Identitätswechsel oder nach einem Undo einstellen müssen. Überprüfen Sie hier für eine ähnliche Frage .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top