Partager via


Emprunt d’identité et restauration

Remarque

Cet article s’applique à Windows.

Pour plus d’informations sur ASP.NET Core, consultez ASP.NET Sécurité principale.

Parfois, vous devrez peut-être obtenir un jeton de compte Windows pour emprunter l’identité d’un compte Windows. Par exemple, votre ASP. L’application basée sur NET peut avoir à agir pour le compte de plusieurs utilisateurs à différents moments. Votre application peut accepter un jeton qui représente un administrateur à partir d’Internet Information Services (IIS), emprunter l’identité de cet utilisateur, effectuer une opération et revenir à l’identité précédente. Ensuite, il peut accepter un jeton d’IIS qui représente un utilisateur avec moins de droits, effectuer une opération et rétablir à nouveau.

Dans les cas où votre application doit emprunter l’identité d’un compte Windows qui n’a pas été attaché au thread actuel par IIS, vous devez récupérer le jeton de ce compte et l’utiliser pour activer le compte. Pour ce faire, effectuez les tâches suivantes :

  1. Récupérez un jeton de compte pour un utilisateur particulier en effectuant un appel à la méthode LogonUser non managée. Cette méthode n’est pas dans la bibliothèque de classes de base .NET, mais se trouve dans la advapi32.dllnon managée. L’accès aux méthodes dans du code non managé est une opération avancée et dépasse la portée de cette discussion. Pour plus d’informations, consultez Interopération avec du code non managé. Pour plus d’informations sur la méthode LogonUser et advapi32.dll, consultez la documentation du Kit de développement logiciel (SDK) platform.

  2. Créez une instance de la classe WindowsIdentity , en passant le jeton. Le code suivant illustre cet appel, où 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 WindowsImpersonationContext classe et en l’initialisant avec la WindowsIdentity.Impersonate méthode de la classe initialisée, comme indiqué dans le code suivant.

    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();  
    
    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()  
    
  4. Lorsque vous n’avez plus besoin d’emprunter l’identité, appelez la WindowsImpersonationContext.Undo méthode pour rétablir l’emprunt d’identité, comme indiqué dans le code suivant.

    myImpersonation.Undo();  
    
    myImpersonation.Undo()  
    

Si le code approuvé a déjà attaché un WindowsPrincipal objet au thread, vous pouvez appeler la méthode d’instance Impersonate, qui ne prend pas de jeton de compte. Notez que cela est utile uniquement lorsque l’objet WindowsPrincipal sur le thread représente un utilisateur autre que celui sous lequel le processus est en cours d’exécution. Par exemple, vous pouvez rencontrer cette situation à l’aide de ASP.NET avec l’authentification Windows activée et l’emprunt d’identité désactivé. Dans ce cas, le processus s’exécute sous un compte configuré dans Internet Information Services (IIS), tandis que le principal actuel représente l’utilisateur Windows qui accède à la page.

Notez que ni emprunter l’identité ni annuler ne modifie l’objet Principal (IPrincipal) associé au contexte d’appel actuel. Au lieu de cela, l’emprunt d’identité et la restauration modifient le jeton associé au processus de système d’exploitation actuel.

Voir aussi