Олицетворение ASP.NET
Обновлен: Ноябрь 2007
При использовании олицетворения приложения ASP.NET могут выполняться с удостоверением Windows (учетной записью) пользователя, выполняющего запрос. Олицетворение часто используется в приложениях, в которых проверка подлинности пользователя выполняется с помощью служб Microsoft IIS.
По умолчанию олицетворение ASP.NET отключено. Если для приложения ASP.NET разрешено олицетворение, то это приложение выполняется в контексте удостоверения, маркер доступа которого был передан IIS в ASP.NET. Таким маркером может быть маркер пользователя, прошедшего проверку подлинности, например, маркер для зарегистрированного пользователя Windows, или маркер, предоставляемый службами IIS анонимным пользователям (обычно используется удостоверение IUSR_MACHINENAME).
Когда разрешено олицетворение, в контексте воплощаемого пользователя выполняется только код соответствующего приложения. Компиляция приложений и загрузка сведений о конфигурации выполняется с помощью удостоверения процесса ASP.NET. Дополнительные сведения см. в разделе Настройка удостоверения процесса ASP.NET. Скомпилированное приложение помещается в каталог «Временные файлы ASP.NET». Необходимо, чтобы у олицетворяемого удостоверения приложения был доступ на чтение/запись данных в этом каталоге. Кроме того, олицетворяемое удостоверение приложения должно иметь доступ на чтение файлов в каталоге приложения и его подкаталогах. Дополнительные сведения см. в разделе Обязательные списки управления доступом (ACL) ASP.NET.
Примечание. |
---|
Поскольку при компиляции приложений и загрузке сведений о конфигурации ASP.NET использует удостоверение Windows процесса ASP.NET, на сервере, на котором запущено несколько приложений, необходимо обеспечивать конфиденциальность кода приложения и сведений о конфигурации в различных приложениях. В Windows Server 2003 можно создать несколько пулов приложений и задать уникальное удостоверение для каждого из них. Затем можно ограничить доступ к файлам приложений с помощью списков управления доступом (ACL) (если файловая система имеет формат NTFS) и этих удостоверений. Например, имеются два приложения App1 и App2, информация в каждом из которых должна оставаться конфиденциальной. Можно поместить приложение App1 в пул приложений ApplicationPool1, имеющий удостоверение ID_ApplicationPool1. Можно поместить приложение App2 в пул приложений ApplicationPool2, имеющий удостоверение ID_ApplicationPool2. Учетной записи ID_ApplicationPool1 предоставлен доступ к файлам в приложении App1, но запрещен доступ к файлам в приложении App2. Учетной записи ID_ApplicationPool2 предоставлен доступ к файлам в приложении App2, но запрещен доступ к файлам в приложении App1. Обратите внимание, что такое разделение невозможно в Windows 2000 или Windows XP Professional, поскольку в этих операционных системах для всех приложений ASP.NET используется одно удостоверение процесса. |
Управление олицетворением осуществляется с помощью элемента конфигурации identity. Как и другие директивы конфигурации, эта директива применяется в соответствии с иерархией. Файл минимальной конфигурации для включения олицетворения для приложения может выглядеть следующим образом:
<configuration>
<system.web>
<identity impersonate="true"/>
</system.web>
</configuration>
Можно также добавить поддержку определенных имен для запуска приложения в качестве настраиваемого удостоверения, как показано в следующем примере:
<identity impersonate="true"
userName="contoso\Jane"
password="********" />
Подставьте правильный пароль для значения, указанного в предыдущем примере.
Примечание. |
---|
В приведенном выше примере имя пользователя и пароль сохраняются в текстовом формате в файле конфигурации. Чтобы повысить уровень безопасности приложения, рекомендуется ограничить доступ к файлу Web.config с помощью списка управления доступом (ACL) и зашифровать элемент конфигурации identity в файле Web.config с помощью защищенной конфигурации. Дополнительные сведения см. в разделе Шифрование сведений о конфигурации с помощью функции защищенной конфигурации. |
Конфигурация, представленная в данном примере, позволяет выполнять все приложение с использованием удостоверения contoso\Jane независимо от удостоверения запроса. Этот тип олицетворения можно передать другому компьютеру. Таким образом, если указываются имя пользователя и пароль для воплощаемого пользователя, можно установить соединение с другим компьютером в сети и отправить запрос на получение ресурсов, например файлов или доступа к SQL Server, используя встроенную защиту. Если разрешить олицетворение, не указав в качестве удостоверения учетную запись домена, подключение к другому компьютеру в сети будет невозможно, пока приложение IIS не будет настроено на использование обычной проверки подлинности.
Примечание. |
---|
В Windows 2000 нельзя выполнять олицетворение с использованием определенных учетных данных пользователя для удостоверения рабочего процесса ASP.NET. Однако можно разрешить олицетворение без определенных учетных данных пользователя, чтобы приложение олицетворяло удостоверение, заданное службами IIS. Дополнительные сведения см. в статье 810204 «PRB: Per Request Impersonation Does Not Work on Windows 2000 with ASP.NET» в базе знаний Майкрософт по адресу https://support.microsoft.com. |
Чтение олицетворяемого удостоверения
В следующем примере кода показано, как программно считывать удостоверение воплощаемого пользователя:
Dim username As String = _
System.Security.Principal.WindowsIdentity.GetCurrent().Name
String username =
System.Security.Principal.WindowsIdentity.GetCurrent().Name;