Partager via


Emprunt et restauration d'identité

Dans certaines circonstances, vous devrez peut-être obtenir un jeton de compte Windows NT pour emprunter l'identité d'un compte Windows. Par exemple, votre application ASP.NET peut agir pour le compte de plusieurs utilisateurs à des moments différents. Elle peut accepter un jeton représentant un administrateur des services IIS (Internet Information Services), emprunter l'identité de cet utilisateur, exécuter une opération, puis reprendre l'identité précédente. Par la suite, elle peut accepter un jeton de IIS représentant un utilisateur doté de droits moindres, exécuter une opération, puis reprendre l'identité précédente.

Lorsque votre application doit emprunter l'identité d'un compte Windows qui n'a pas été attaché au thread en cours par les services Internet (IIS), vous devez extraire le jeton du compte et l'utiliser pour activer le compte. Pour effectuer cette opération, vous pouvez procéder comme suit :

  1. Extrayez le jeton d'un compte d'un utilisateur spécifique en appelant la méthode non managée LogonUser. Cette méthode ne figure pas dans la bibliothèque de classes de base .NET Framework, mais elle se trouve dans la bibliothèque non managée advapi32.dll. L'accès aux méthodes dans du code non managé est une opération complexe qui dépasse le cadre de cette rubrique. Pour plus d'informations, consultez Interopérabilité avec du code non managé. Pour plus d'informations sur la méthode LogonUser et sur advapi32.dll, consultez la documentation du Kit de développement Platform SDK.

  2. Créez une nouvelle instance de la classe WindowsIdentity, en passant le jeton. Le code suivant illustre cet appel dans lequel hToken représente un jeton Windows.

    WindowsIdentity ImpersonatedIdentity = new WindowsIdentity(hToken);
    
    Dim ImpersonatedIdentity As New WindowsIdentity(hToken)
    
  3. Commencez l'emprunt d'identité en créant une nouvelle instance de la classe WindowsImpersonationContext et en l'initialisant avec la méthode WindowsIdentity.Impersonate de la classe initialisée, comme illustré dans le code suivant.

    WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate();
    
    WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate()
    
  4. Une fois que l'emprunt d'identité n'est plus nécessaire, appelez la méthode WindowsImpersonationContext.Undo pour reprendre l'identité précédente, comme illustré dans le code suivant.

    MyImpersonation.Undo();
    
    MyImpersonation.Undo()
    

Si du code de confiance a déjà attaché un objet WindowsPrincipal au thread, vous pouvez appeler la méthode d'instance Impersonate qui n'utilise pas de jeton de compte. Notez que ceci est seulement utile si l'objet WindowsPrincipal du thread représente un utilisateur autre que celui sous lequel le traitement est en cours d'exécution, par exemple, lors de l'utilisation de ASP.NET avec l'authentification Windows activée et l'emprunt d'identité désactivé. Dans ce cas, le traitement est exécuté sous un compte configuré dans les services IIS tandis que l'entité de sécurité en cours représente l'utilisateur Windows qui accède à la page.

Notez que ni Impersonate ni Undo ne change l'objet Principal associé au contexte d'appel en cours. Au lieu de cela, l'emprunt et la reprise d'identité changent le jeton associé au traitement du système d'exploitation en cours.

Voir aussi

Référence

WindowsIdentity
WindowsImpersonationContext

Concepts

Objets Principal et Identity
Emprunt d'identité ASP.NET
Utilisation de l'authentification IIS avec l'emprunt d'identité ASP.NET

Autres ressources

Interopération avec du code non managé