Imiteren en terugkeren
Notitie
Dit artikel is van toepassing op Windows.
Zie ASP.NET Core Security voor meer informatie over ASP.NET Core.
Soms moet u mogelijk een Windows-accounttoken verkrijgen om een Windows-account te imiteren. Bijvoorbeeld uw ASP. De toepassing op basis van NET moet mogelijk op verschillende momenten handelen namens verschillende gebruikers. Uw toepassing kan een token accepteren dat een beheerder van Internet Information Services (IIS) vertegenwoordigt, die gebruiker imiteert, een bewerking uitvoert en teruggaat naar de vorige identiteit. Vervolgens kan het een token van IIS accepteren dat een gebruiker met minder rechten vertegenwoordigt, een bepaalde bewerking uitvoert en opnieuw herstelt.
In situaties waarin uw toepassing een Windows-account moet imiteren dat niet is gekoppeld aan de huidige thread door IIS, moet u het token van dat account ophalen en gebruiken om het account te activeren. U kunt dit doen door de volgende taken uit te voeren:
Haal een accounttoken op voor een bepaalde gebruiker door een aanroep uit te voeren naar de onbeheerde aanmeldingsmethode. Deze methode bevindt zich niet in de .NET-basisklassebibliotheek, maar bevindt zich in de niet-beheerde advapi32.dll. Toegang tot methoden in onbeheerde code is een geavanceerde bewerking en valt buiten het bereik van deze discussie. Zie Interoperating with Unmanaged Code (Interoperating with Unmanaged Code) voor meer informatie. Zie de Platform SDK-documentatie voor meer informatie over de methode LogonUser en advapi32.dll.
Maak een nieuw exemplaar van de WindowsIdentity-klasse , waarbij het token wordt doorgegeven. De volgende code demonstreert deze aanroep, waarbij
hToken
een Windows-token wordt aangegeven.WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);
Dim impersonatedIdentity As New WindowsIdentity(hToken)
Begin met imitatie door een nieuw exemplaar van de WindowsImpersonationContext klasse te maken en deze te initialiseren met de WindowsIdentity.Impersonate methode van de geïnitialiseerde klasse, zoals wordt weergegeven in de volgende code.
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()
Wanneer u zich niet meer hoeft te imiteren, roept u de WindowsImpersonationContext.Undo methode aan om de imitatie te herstellen, zoals wordt weergegeven in de volgende code.
myImpersonation.Undo();
myImpersonation.Undo()
Als vertrouwde code al een WindowsPrincipal object aan de thread heeft gekoppeld, kunt u de exemplaarmethode imitatie aanroepen. Dit houdt geen accounttoken in. Houd er rekening mee dat dit alleen nuttig is wanneer het WindowsPrincipal-object op de thread een andere gebruiker vertegenwoordigt dan het object waaronder het proces momenteel wordt uitgevoerd. U kunt deze situatie bijvoorbeeld tegenkomen met behulp van ASP.NET met Windows-verificatie ingeschakeld en imitatie uitgeschakeld. In dit geval wordt het proces uitgevoerd onder een account dat is geconfigureerd in IIS (Internet Information Services), terwijl de huidige principal de Windows-gebruiker vertegenwoordigt die toegang heeft tot de pagina.
Houd er rekening mee dat het principal-object () dat is gekoppeld aan de huidige aanroepcontext, niet imiteren of ongedaan maken, wordt gewijzigd.IPrincipal In plaats daarvan wijzigt imitatie en het herstellen van het token dat is gekoppeld aan het huidige besturingssysteemproces.