Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета Технологии разработки Internetприложений ASP.NET приложения: Безопасность – проверка подлинности, олицетворение проф. В.К.Толстых, www.tolstykh.com Для обеспечения безопасного авторизированного доступа к Web-приложению и его ресурсам необходимо решить следующие задачи: 1. Выбор варианта проверки подлинности (см. далее), при необходимости – конфиденциальности и целостности. 2. Реализация аутентификации пользователя – определение идентичности пользователя и обеспечения гарантий этой идентичности. 3. Реализация авторизации – управление списком разрешающих или запрещающих правил, регулирующих доступ к содержимому аутентифицированного пользователя. Проверка подлинности ASP.NET Страницы ASP.NET исполняются внутри рабочего процесса или программы Windows. Все программы Windows работают с отдельным удостоверением безопасности. На веб-сервере, работающем под управлением IIS, рабочий процесс ASP.NET выполняется в пуле приложений. Пул приложений определяет удостоверение, под которым выполняется рабочий процесс и все его приложения. По умолчанию это – учетная запись ApplicationPoolIdentity для IIS 7, NetworkService – для IIS 6, ASPNET – для IIS 5. В качестве альтернативы, с помощью настройки использования приложения с олицетворением (доступно в IIS 7), можно задать для ASP.NET выполнение под другим удостоверением или под удостоверением Windows-пользователя, сделавшего запрос. Варианты проверки подлинности: анонимная проверка подлинности проверки подлинности с использованием олицетворения ASP.NET обычная проверка подлинности дайджест-проверки подлинности проверка подлинности с помощью форм проверка подлинности Windows сопоставление сертификата клиента Консоль диспетчера IIS 7 Анонимная проверка подлинности Включение анонимной проверки подлинности позволяет редактировать учетную запись, которая используется службами IIS для доступа к узлу и приложению. При анонимном доступе IIS 7 по умолчанию использует IUSR в качестве имени пользователя. Пользователь IUSR создаётся при установке IIS. Замечание. Если изменить учётную запись анонимной проверки подлинности с IUSR на какую-либо другую, например, на сетевую, то анонимные клиенты Web-приложений получат доступ ко всей внутренней сети! Проверка подлинности с использованием олицетворения ASP.NET Олицетворение ASP.NET используется, когда необходимо выполнить приложение пользователя ASP.NET в контексте безопасности, отличном от контекста по умолчанию для приложения ASP.NET. Если разрешить олицетворение для приложения ASP.NET, это приложение сможет работать в одном из двух вариантов: от имени пользователя, прошедшего проверку подлинности в службах IIS 7, или от имени учетной записи, заданной разработчиком для всех пользователей его приложения . По умолчанию олицетворение ASP.NET выключено. Процедуру олицетворения можно выполнить несколькими способами: 1. с помощью пользовательского интерфейса, 2. команды Appcmd.exe в окне командной строки, 3. прямым изменением файлов конфигурации, посредством написания сценариев WMI (Windows Management Instrumentation) – VBScript, Windows PowerShell. 4. Рассмотрим 1, 3 Олицетворение с помощью диспетчера IIS 7 Приложение будет работать от имени пользователя, прошедшего проверку подлинности После этого выбора службы IIS будут использовать выбранное удостоверение для контекста безопасности приложения ASP.NET. Приложение будет работать от заданной учётной записи при анонимном доступе Олицетворение с помощью настройки конфигурации <identity> в <system.web> (Имперсонализация ) <identity impersonate="true|false" userName="domain|username" password="<secure password>"/> Атрибут impersonate указывает, следует ли использовать олицетворение клиента. Атрибут password задает используемый пароль, если impersonate имеет значение true. Атрибут userName задает имя пользователя, если impersonate имеет значение true. Чтобы зашифровать имя пользователя и пароль и сохранить их в реестре, установите значения атрибутов userName и password, как показано в следующем примере: userName="registry:HKLM\Software\AspNetProcess,Name" password="registry:HKLM\Software\AspNetProcess,Pwd" Учетные данные должны быть представлены в формате REG_BINARY и содержать результат вызова функции Windows API CryptProtectData. Для создания зашифрованных учетных данных и сохранения их в реестре можно воспользоваться программой Aspnet_setreg.exe, которая выполняет операции шифрования с помощью функции CryptProtectData. Доступ к параметрам конфигурации программными средствами <%@ Import Namespace="System.Web.Configuration" %> <%@ Import Namespace="System.Configuration" %> <%@ Import Namespace="System.Text" %> try { // Установка пути к Web-приложению, где находится Web.config string configPath = "/MyAppRoot"; // Получение объекта конфигурации по заданному пути к Web.config Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath); // Получение объекта, соответствующего разделу <identity> IdentitySection section = (IdentitySection)config.GetSection("system.web/identity"); // Чтение раздела <identity> StringBuilder identity = new StringBuilder(); identity.Append("Impersonate: "); identity.Append(section.Impersonate.ToString()); // Показ информации раздела <identity> ConfigId.Text = identity.ToString(); } catch (Exception e) { ConfigId.Text = e.ToString(); } Обычная проверка подлинности Для обычной проверки подлинности необходимо, чтобы для доступа к содержимому пользователи предоставляли имя пользователя и пароль. Для этого метода проверки подлинности не требуется специальный обозреватель. Она также работает при подключении через брандмауэры и прокси-серверы. Однако недостатком метода является то, что при его использовании по сети пересылаются незашифрованные пароли. Замечание. Обычная проверка подлинности может использоваться, только если известно, что соединение между клиентом и сервером безопасно. Подключение должно устанавливаться по выделенной линии или с помощью SSL-шифрования и протокола TSL. Дайджест-проверка подлинности При дайджест-проверке подлинности контроллер домена Windows используется, чтобы проверить подлинность пользователей, которые запросили доступ к содержимому вебсервера. Дайджест-проверка подлинности в службах IIS 6.0 называлась расширенной краткой проверкой подлинности. Когда требуется более высокий по сравнению с обычной проверкой подлинности уровень безопасности, рекомендуется применять дайджест-проверку подлинности, особенно если в производственной среде имеются брандмауэры и проксисерверы. Проверка подлинности с помощью форм При проверке подлинности с помощью форм используется перенаправление на стороне клиента, чтобы направить непроверенных пользователей к HTML-форме, в которую они могут ввести свои учетные данные, обычно в виде имени пользователя и пароля. После проверки учетных данных пользователи перенаправляются на страницу, которую они первоначально запросили. Замечание. При проверке подлинности с помощью форм имя пользователя и пароль пересылаются в веб-сервер в виде обычного текста, поэтому следует использовать шифрование SSL для страницы входа и всех других страниц приложения. Проверка подлинности Windows Проверку подлинности Windows следует использовать при необходимости проверки подлинности пользователей с помощью протоколов NTLM или Kerberos. Проверка подлинности Windows не пригодна для использования в Интернете, так как эта среда не требует и не шифрует учетные данные пользователя. Проверка подлинности Windows лучше всего подходит для интрасети по приведенным ниже причинам: 1. 2. 3. 4. Клиентские компьютеры и веб-серверы находятся в одном домене. Администраторы могут обеспечить наличие на всех компьютерах обозревателей Internet Explorer не ниже версии 2.0. Не требуется подключений через HTTP-прокси, которые не поддерживаются NTLM. Для работы Kerberos v5 требуется подключение к службе каталогов Active Directory, что не представляется возможным в Интернете.