Freigeben über


Wechseln und Zurücksetzen der Identität

Hinweis

Dieser Artikel bezieht sich auf Windows.

Informationen zu ASP.NET Core finden Sie unter ASP.NET Core Security.

Manchmal müssen Sie möglicherweise ein Windows-Kontotoken abrufen, um die Identität eines Windows-Kontos zu imitieren. Beispiel: Ihre ASP. Net-basierte Anwendung muss möglicherweise im Auftrag mehrerer Benutzer zu unterschiedlichen Zeiten handeln. Ihre Anwendung akzeptiert möglicherweise ein Token, das einen Administrator von Internet Information Services (IIS) darstellt, diesen Benutzer imitiert, einen Vorgang ausführt und dann zur vorherigen Identität zurückkehrt. Als Nächstes akzeptiert es möglicherweise ein Token von IIS, das einen Benutzer mit weniger Rechten darstellt, einige Vorgänge ausführt und erneut zurückgesetzt wird.

In Situationen, in denen Ihre Anwendung ein Windows-Konto imitieren muss, das nicht an den aktuellen Thread von IIS angefügt wurde, müssen Sie das Token dieses Kontos abrufen und es verwenden, um das Konto zu aktivieren. Sie können dies tun, indem Sie die folgenden Aufgaben ausführen:

  1. Rufen Sie ein Kontotoken für einen bestimmten Benutzer ab, indem Sie einen Aufruf der nicht verwalteten LogonUser-Methode durchführen. Diese Methode befindet sich nicht in der .NET-Basisklassenbibliothek, befindet sich jedoch in der nicht verwalteten advapi32.dll. Der Zugriff auf Methoden im nicht verwalteten Code ist ein erweiterter Vorgang, der über den Rahmen dieser Diskussion hinausgeht. Weitere Informationen finden Sie unter Interoperation mit nicht verwaltetem Code. Weitere Informationen zur LogonUser-Methode und advapi32.dllfinden Sie in der Platform SDK-Dokumentation.

  2. Erstellen Sie eine neue Instanz der WindowsIdentity-Klasse , und übergeben Sie das Token. Der folgende Code veranschaulicht diesen Aufruf, wobei hToken ein Windows-Token dargestellt wird.

    WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);  
    
    Dim impersonatedIdentity As New WindowsIdentity(hToken)  
    
  3. Beginnen Sie mit dem Identitätswechsel, indem Sie ein neues Objekt der WindowsImpersonationContext-Klasse erstellen und es mit der WindowsIdentity.Impersonate-Methode der initialisierten Klasse initialisieren, wie im folgenden Code gezeigt.

    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();  
    
    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()  
    
  4. Wenn Sie die neue Identität nicht mehr benötigen, rufen Sie die WindowsImpersonationContext.Undo-Methode auf, um den Identitätswechsel zurückzunehmen, wie im folgenden Code gezeigt.

    myImpersonation.Undo();  
    
    myImpersonation.Undo()  
    

Wenn vertrauenswürdiger Code bereits ein WindowsPrincipal Objekt an den Thread angefügt hat, können Sie die Instanzmethode imitate aufrufen, die kein Kontotoken verwendet. Beachten Sie, dass dies nur hilfreich ist, wenn das WindowsPrincipal-Objekt im Thread einen anderen Benutzer als die darstellt, unter der der Prozess derzeit ausgeführt wird. Sie können beispielsweise auf diese Situation stoßen, indem Sie ASP.NET mit aktivierter Windows-Authentifizierung und deaktivierter Impersonation verwendet. In diesem Fall wird der Prozess unter einem Konto ausgeführt, das in Internet Information Services (IIS) konfiguriert ist, während der aktuelle Hauptbenutzer den Windows-Benutzer darstellt, der auf die Seite zugreift.

Beachten Sie, dass weder Impersonieren noch Rückgängigmachen das dem aktuellen Aufrufkontext zugeordnete Principal-Objekt (IPrincipal) ändert. Stattdessen wird sowohl beim Identitätswechsel als auch beim Zurücksetzen das Token geändert, das dem aktuellen Betriebssystemprozess zugeordnet ist.

Siehe auch