Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga / Notatka
Ten artykuł dotyczy systemu Windows.
Aby uzyskać informacje o 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 aplikacja oparta na platformie ASP.NET może musieć działać w imieniu kilku użytkowników w różnych momentach czasu. 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 IIS reprezentujący użytkownika z mniejszymi uprawnieniami, wykonać operację i ponownie przywrócić.
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
hTokenreprezentuje token systemu Windows.WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);Dim impersonatedIdentity As New WindowsIdentity(hToken)Rozpocznij impersonację, tworząc nowe wystąpienie klasy WindowsImpersonationContext i inicjując je metodą WindowsIdentity.Impersonate zainicjowanej klasy, jak pokazano w poniższym kodzie.
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()Gdy nie musisz już się podszywać, wywołaj metodę WindowsImpersonationContext.Undo, aby wycofać podszywanie się, jak pokazano w poniższym kodzie.
myImpersonation.Undo();myImpersonation.Undo()
Jeśli zaufany kod już dołączył obiekt WindowsPrincipal do wątku, możesz wywołać metodę instancji Impersonate, która nie wymaga 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 Impersonate, ani Undo nie zmienia obiektu Principal (IPrincipal) skojarzonego z bieżącym kontekstem wywołania. Zamiast tego, podszywanie się i przywracanie zmieniają token skojarzony z bieżącym procesem systemu operacyjnego.