Sdílet prostřednictvím


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:

  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 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.

  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 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()  
    
  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 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.

Viz také