Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Эта статья относится к Windows.
Сведения о ASP.NET Core см. в разделе ASP.NET Core Security.
Иногда может потребоваться получить токен учетной записи Windows для имитации учетной записи Windows. Например, ASP.NET-приложение может выполнять действия от имени нескольких пользователей в разное время. Приложение может принять токен, представляющий администратора из служб Интернет-информации (IIS), подменить этого пользователя, выполнить операцию и вернуться к предыдущему удостоверению. Затем он может принять маркер из IIS, представляющий пользователя с меньшим количеством прав, выполнить некоторую операцию и вернуться еще раз.
В ситуациях, когда вашему приложению необходимо олицетворить учетную запись Windows, которая не была присоединена к текущему потоку через IIS, вы должны получить токен этой учетной записи и использовать его для активации учетной записи. Это можно сделать, выполнив следующие задачи:
Получить маркер учетной записи для определённого пользователя вызовом неуправляемого метода LogonUser. Этот метод не находится в библиотеке базовых классов .NET, но находится в неуправляемой advapi32.dll. Доступ к методам в неуправляемом коде является расширенной операцией и выходит за рамки этого обсуждения. Дополнительные сведения см. в разделе Взаимодействие с неуправляемым кодом. Дополнительные сведения о методе LogonUser и advapi32.dllсм. в документации по пакету SDK для платформы.
Создайте новый экземпляр класса WindowsIdentity , передав токен. Следующий код демонстрирует этот вызов, где
hTokenпредставляет маркер Windows.WindowsIdentity impersonatedIdentity = new WindowsIdentity(hToken);Dim impersonatedIdentity As New WindowsIdentity(hToken)Начните имитацию, создав новый экземпляр класса WindowsImpersonationContext и инициализировав его с помощью метода WindowsIdentity.Impersonate инициализированного класса, как показано в следующем коде.
WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate();WindowsImpersonationContext myImpersonation = impersonatedIdentity.Impersonate()Если вам больше не нужно олицетворение, вызовите WindowsImpersonationContext.Undo метод для возврата олицетворения, как показано в следующем коде.
myImpersonation.Undo();myImpersonation.Undo()
Если доверенный WindowsPrincipal код уже подключил объект к потоку, можно вызвать метод экземпляра Impersonate, который не принимает маркер учетной записи. Обратите внимание, что это имеет смысл только в том случае, если объект WindowsPrincipal в потоке представляет пользователя, отличного от того, под которым в данный момент выполняется процесс. Например, вы можете столкнуться с этой ситуацией при использовании ASP.NET, когда включена проверка подлинности Windows, и отключена имперсонация. В этом случае процесс выполняется под учетной записью, настроенной в службах IIS, в то время как текущий субъект представляет пользователя Windows, который обращается к странице.
Обратите внимание, что ни Impersonate, ни Undo не изменяют объект Principal (IPrincipal), связанный с текущим контекстом вызова. Вместо этого, олицетворение и отмена изменений возвращают токен, связанный с текущим процессом операционной системы.