Personifiera och återställa
Kommentar
Den här artikeln gäller för Windows.
Information om ASP.NET Core finns i ASP.NET Core Security.
Ibland kan du behöva hämta en Windows-kontotoken för att personifiera ett Windows-konto. Till exempel din ASP. NET-baserade program kan behöva agera på uppdrag av flera användare vid olika tidpunkter. Ditt program kan acceptera en token som representerar en administratör från Internet Information Services (IIS), personifiera den användaren, utföra en åtgärd och återgå till den tidigare identiteten. Därefter kan den acceptera en token från IIS som representerar en användare med färre rättigheter, utföra en åtgärd och återställa igen.
I situationer där ditt program måste personifiera ett Windows-konto som inte har kopplats till den aktuella tråden av IIS måste du hämta kontots token och använda den för att aktivera kontot. Du kan göra detta genom att utföra följande uppgifter:
Hämta en kontotoken för en viss användare genom att göra ett anrop till den ohanterade inloggningsmetoden. Den här metoden finns inte i .NET-basklassbiblioteket, men finns i den ohanterade advapi32.dll. Att komma åt metoder i ohanterad kod är en avancerad åtgärd och ligger utanför omfånget för den här diskussionen. Mer information finns i Interoperating with Unmanaged Code (Samverka med ohanterad kod). Mer information om metoden LogonUser och advapi32.dll finns i dokumentationen om Platform SDK.
Skapa en ny instans av klassen WindowsIdentity och skicka token. Följande kod visar det här anropet, där
hToken
representerar en Windows-token.WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);
Dim impersonatedIdentity As New WindowsIdentity(hToken)
Börja personifieringen genom att skapa en ny instans av WindowsImpersonationContext klassen och initiera den med WindowsIdentity.Impersonate metoden för den initierade klassen, enligt följande kod.
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()
När du inte längre behöver personifiera anropar WindowsImpersonationContext.Undo du metoden för att återställa personifieringen, enligt följande kod.
myImpersonation.Undo();
myImpersonation.Undo()
Om betrodd kod redan har kopplat ett WindowsPrincipal objekt till tråden kan du anropa instansmetoden Personifiera, som inte tar en kontotoken. Observera att detta bara är användbart när WindowsPrincipal-objektet i tråden representerar en annan användare än den som processen körs under. Du kan till exempel stöta på den här situationen med hjälp av ASP.NET med Windows-autentisering aktiverat och personifiering inaktiverat. I det här fallet körs processen under ett konto som konfigurerats i Internet Information Services (IIS) medan det aktuella huvudnamnet representerar den Windows-användare som har åtkomst till sidan.
Observera att varken Personifiera eller Ångra ändrar huvudobjektet (IPrincipal) som är associerat med den aktuella anropskontexten. I stället ändrar personifiering och återställning den token som är associerad med den aktuella operativsystemet.