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