Udostępnij za pośrednictwem


Personifikacja i przywracanie

Uwaga

Ten artykuł dotyczy systemu Windows.

Aby uzyskać informacje na temat ASP.NET Core, zobacz ASP.NET Core Security.

Czasami może być konieczne uzyskanie tokenu konta systemu Windows w celu personifikacji konta systemu Windows. Na przykład asp. Aplikacja oparta na platformie NET może być musiała działać w imieniu kilku użytkowników w różnym czasie. Aplikacja może zaakceptować token reprezentujący administratora z internetowych usług informacyjnych (IIS), personifikować tego użytkownika, wykonać operację i przywrócić poprzednią tożsamość. Następnie może zaakceptować token z usług IIS reprezentujący użytkownika z mniejszą liczbą praw, wykonać operację i przywrócić ponownie.

W sytuacjach, w których aplikacja musi personifikować konto systemu Windows, które nie zostało dołączone do bieżącego wątku przez usługi IIS, należy pobrać token tego konta i użyć go do aktywowania konta. Można to zrobić, wykonując następujące zadania:

  1. Pobierz token konta dla określonego użytkownika, wykonując wywołanie metody LogonUser niezarządzanej. Ta metoda nie znajduje się w bibliotece klas bazowych platformy .NET, ale znajduje się w niezarządzanej advapi32.dll. Uzyskiwanie dostępu do metod w kodzie niezarządzanym jest operacją zaawansowaną i wykracza poza zakres tej dyskusji. Aby uzyskać więcej informacji, zobacz Interoperating with Unmanaged Code (Współdziałanie z niezarządzanymi kodami). Aby uzyskać więcej informacji na temat metody LogonUser i advapi32.dll, zobacz dokumentację zestawu SDK platformy.

  2. Utwórz nowe wystąpienie klasy WindowsIdentity , przekazując token. Poniższy kod demonstruje to wywołanie, gdzie hToken reprezentuje token systemu Windows.

    WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);  
    
    Dim impersonatedIdentity As New WindowsIdentity(hToken)  
    
  3. Rozpocznij personifikację, tworząc nowe wystąpienie WindowsImpersonationContext klasy i inicjując ją WindowsIdentity.Impersonate za pomocą metody zainicjowanej klasy, jak pokazano w poniższym kodzie.

    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();  
    
    WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()  
    
  4. Jeśli nie musisz już personifikować, wywołaj metodę WindowsImpersonationContext.Undo , aby przywrócić personifikację, jak pokazano w poniższym kodzie.

    myImpersonation.Undo();  
    
    myImpersonation.Undo()  
    

Jeśli zaufany kod już dołączył WindowsPrincipal obiekt do wątku, możesz wywołać metodę wystąpienia Personifikuj, która nie bierze tokenu konta. Należy pamiętać, że jest to przydatne tylko wtedy, gdy obiekt WindowsPrincipal w wątku reprezentuje użytkownika innego niż ten, w którym proces jest obecnie wykonywany. Na przykład może wystąpić taka sytuacja przy użyciu ASP.NET z włączonym uwierzytelnianiem systemu Windows i wyłączeniem personifikacji. W takim przypadku proces jest uruchamiany w ramach konta skonfigurowanego w usługach Internet Information Services (IIS), podczas gdy bieżący podmiot zabezpieczeń reprezentuje użytkownika systemu Windows, który uzyskuje dostęp do strony.

Należy pamiętać, że ani personifikuj , ani cofnij , nie zmienia obiektu principal (IPrincipal) skojarzonego z bieżącym kontekstem wywołania. Zamiast tego personifikacja i przywracanie zmiany tokenu skojarzonego z bieżącym procesem systemu operacyjnego.

Zobacz też