Zosobnění a návrat
Poznámka:
Tento článek se týká Windows.
Informace o ASP.NET Core najdete v tématu ASP.NET Core Security.
Někdy může být potřeba získat token účtu Systému Windows, abyste mohli zosobnit účet Windows. Například vaše ASP. Aplikace založená na technologii NET může v různých časech jednat jménem několika uživatelů. Vaše aplikace může přijmout token, který představuje správce ze služby Internetová informační služba (IIS), zosobnit daného uživatele, provést operaci a vrátit se k předchozí identitě. Dále může přijmout token ze služby IIS, který představuje uživatele s menším počtem práv, provést nějakou operaci a vrátit se znovu.
V situacích, kdy vaše aplikace musí zosobnit účet Systému Windows, který není připojený k aktuálnímu vláknu službou IIS, musíte načíst token daného účtu a použít ho k aktivaci účtu. Můžete to provést provedením následujících úloh:
Načtení tokenu účtu pro konkrétního uživatele provedením volání nespravované metody LogonUser . Tato metoda není v knihovně základních tříd .NET, ale nachází se v nespravovaném advapi32.dll. Přístup k metodám v nespravovaném kódu je pokročilá operace a přesahuje rozsah této diskuze. Další informace najdete v tématu Spolupráce s nespravovaným kódem. Další informace o metodě LogonUser a advapi32.dll naleznete v dokumentaci k sadě SDK platformy.
Vytvořte novou instanci třídy WindowsIdentity a předáte token. Následující kód ukazuje toto volání, kde
hToken
představuje token Windows.WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);
Dim impersonatedIdentity As New WindowsIdentity(hToken)
Začněte zosobnění vytvořením nové instance WindowsImpersonationContext třídy a inicializací WindowsIdentity.Impersonate pomocí metody inicializované třídy, jak je znázorněno v následujícím kódu.
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()
Pokud už nepotřebujete zosobnit, zavolejte metodu WindowsImpersonationContext.Undo , která vrátí zosobnění, jak je znázorněno v následujícím kódu.
myImpersonation.Undo();
myImpersonation.Undo()
Pokud již důvěryhodný kód připojil WindowsPrincipal objekt k vláknu, můžete volat metodu instance Impersonate, která nepřebírají token účtu. Všimněte si, že to je užitečné pouze v případě , že WindowsPrincipal objekt ve vlákně představuje jiného uživatele než uživatele, pod kterým se proces právě spouští. Můžete se například setkat s touto situací pomocí ASP.NET se zapnutým ověřováním systému Windows a vypnutým zosobněním. V tomto případě proces běží pod účtem nakonfigurovaným v Internetová informační služba (IIS), zatímco aktuální objekt zabezpečení představuje uživatele systému Windows, který přistupuje na stránku.
Všimněte si, že zosobnění ani vrácení zpět nemění objekt objektu principal (IPrincipal) přidruženého k aktuálnímu kontextu volání. Místo toho zosobnění a vrácení tokenu přidruženého k aktuálnímu procesu operačního systému změňte.