Question

Je rencontre des difficultés lors de l'emprunt d'identité d'un utilisateur. J'ai une méthode déclarée comme ceci:

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

Le code d'appel est:

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

L'utilisateur par défaut n'est PAS membre de LocalTestGroup. Utilisateur indiqué par le jeton IS membre de LocalTestGroup.

Le problème:

Le premier appel à LocalTestGroupOnly () réussit car l'utilisateur indiqué par le jeton est membre de LocalTestGroup. Le deuxième appel (en tant qu'utilisateur par défaut) à LocalTestGroupOnly () doit échouer car l'utilisateur par défaut n'est pas 'Test' et n'appartient pas à LocalTestGroup. Le problème est que cette méthode réussit également.

Si je lance le programme séparément - avec et sans emprunt d'identité, le comportement est correct: il réussit lors de l'emprunt d'identité en tant que "Test" et échoue lors de l'appel en tant qu'utilisateur par défaut.

Quel est le problème ici?

Était-ce utile?

La solution

Pourriez-vous vérifier Thread.CurrentPrincipal.Identity au lieu de WindowsIdentity.GetCurrent () ? PrincipalPermission.Demand () utilise le premier.

Pour changer Thread.CurrentPrincipal (ou HttpContext.User ), il semble que vous deviez les définir explicitement après l'emprunt d'identité ou après une annulation. Consultez ici pour une question similaire. .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top