Napodobování a obnovení

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 internetové informační služby (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:

  1. 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 je umístěna v nespravované 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.dllnaleznete v dokumentaci k sadě SDK platformy.

  2. 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)
    
  3. Začněte zosobnění vytvořením nové instance třídy WindowsImpersonationContext a její inicializací metodou WindowsIdentity.Impersonate inicializované třídy, jak je znázorněno v následujícím kódu.

    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();
    
    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()
    
  4. 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 instanční metodu Impersonate, která nepřebírá 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ě je proces spuštěn pod účtem nakonfigurovaným v Internetových informačních službách (IIS), zatímco aktuální uživatel Windows představuje uživatele, který přistupuje na stránku.

Všimněte si, že zosobnění ani vrácení zpět nemění objekt Principal (IPrincipal) spojený s aktuálním kontextem volání. Spíše zosobnění a vrácení změní token přidružený k aktuálnímu procesu operačního systému.

Viz také