Лекция 11 Поддержка безопасности Web приложений
Стандартные сервисы web приложений Сервисы это некоторые операции (услуги), которые выполняются приложением. Стандартные сервисы: –Аутентификация – процесс распознавания пользователя (как убедиться, что это тот пользователь, который описан в БД); –Управление учетными записями (Membership API) – процесс хранения и изменения учетных записей пользователей. –Роли – возможность группировки пользователей по предоставляемым им правам. –Авторизация – предоставление (или отказ) пользователям права работать с разными ресурсами (страницами, документами, …) приложения. –Профили пользователей (profile, запоминание информации пользователей). –Шифрование (Criptography) –….
Сервисы предоставляются с помощью: –Сервисных ЭУ, которые выполняют некоторые функции. –Прикладного программного интерфейса – специальных классов, позволяющих выполнять требуемые функции. –Настройки файла конфигурации приложения (web.config).
Безопасность в ASP.NET ASP.NET provides security features in addition to those provided by IIS –Oriented around client authentication –Several method available for integrating authentication into your pages –Managed through web.config Accessing authenticated client information –The User property of the Page class provides access to current client information
Authentication and Authorization Authentication Modes –Mode=None –Mode=Windows –Mode=Forms Authorizing clients –Authorization element used to describe which clients are granted access –Supports sub elements allow and deny Users, roles, verbs ? represents anonymous * represents all clients –The first match found (allow or deny) determines authorization
Windows Authentication Users credentials defined in active directory Leverage IIS to perform authentication –IIS challenges browser by sending a 401 status code –IIS forwards the username to ASP.NET
Forms Authentication Common approach for performing application-level authentication –Application manages storage of credentials –Application handles authentication FormsAuthentication class Credential Management and storage
Security providers for common tasks Membership providers –Works with xxMembershipProvider to simplify common tasks in building security infrastructure CreateUser DeleteUser ChangePassword ValidateUser Role providers –xxRoleProvider implements common role-based authorization features CreateRole IsUserInRole GetAllRoles GetRolesForUser Several new controls generate large pieces of security UI
Example: Login control Building a login page now consists of:
How it works…
Wheres the data?
Membership controls Several new controls available that tap into the membership and role providers – login authentication form – alternate views based on identity – password retrieval form (only with un-hashed passwords) – Status and hyperlink to login/logout based on the state – displays username for authenticated users – form for entering new users – form for changing password
Среда безопасности ASP.Net Любое распределенное приложение обязательно должно поддерживать безопасность его использования, поэтому безопасность является существенной частью и любых web-приложений. Вопросы безопасности должны решаться с самого начала разработки web приложения. Безопасность (security) это все средства связанные с защитой ресурсов (страниц, данных, информации) приложения от несанкционированного доступа. К таким средствам относятся: –идентификация пользователей; –предоставление или отказ им в доступе к важным ресурсам, которые хранятся на сервере и передаются по сети. ASP.Net предоставляет разработчику среду (framework) реализации поддержки безопасности, которая решает все эти задачи. В эту среду включены классы: –для аутентификации и авторизации пользователей, а также средства для работы с данными аутентифицированных пользователей. –набор базовых классов для реализации конфиденциальности (секретности) и целостности данных, с помощью использования шифрования и цифровых подписей.
Оценка потенциальных угроз С самого начала разработки необходимо понимать среду работы web приложения: –кто имеет доступ к приложению (является пользователем), –где могут быть возможные точки атак –потенциально возможные угрозы от точек атак Важным является моделирование угроз – структурированный способ анализа среды приложения к возможным угрозам, ранжирование угроз, принятие решений по используемым методам преодоления этих угроз. –Возможные угрозы, ранжирование этих угроз и затем принятие решений о том, как они могут быть уменьшены. –На основе оценки угроз принятие решений по использованию технологий безопасности (таких как аутентификация или SSL шифрование) –Принятие организационных решений по поддержке этих технологий (информирование и обучение пользователей).
Советы по безопасному кодированию При создании web приложения необходимо использовать следующие советы: –Никогда не доверять введенным пользователями данным. Всегда выполнять строгую проверку правильности данных. –Никогда не использовать конкатенацию строк для создания SQL операторов. Всегда использовать параметризированные запросы (хранимые процедуры), чтобы в ваше приложения не внедрялся SQL код. –Никогда не выводите данные введенные пользователем напрямую в ваши web страницы без их проверки (валидации) и кодирования (encoding). Пользователь может ввести фрагменты HTML кода (например, скрипт), который приведет к уязвимости скриптов при связи между сайтами (cross-site scripting vulnerabilities). Поэтому всегда используйте метод HttpUtility.HtmlEncode() для удаления специальных символов, таких как, прежде чем выводить их на страницы или используйте ЭУ, которые выполняют такое кодирование автоматически. –Никогда не храните критически важные для бизнеса данные или данные, которые влияют на принятие решений внутренними бизнес правилами web приложения в скрытых полях web страницы. Скрытые поля могут быть легко изменены, простым просмотром исходного кода web страницы, ее изменения и сохранения в файле. Затем злоумышленник может просто передать локально сохраненную, измененную web страницу на сервер. Имеются plug-ins браузера, которые позволяют сделать это очень просто.
Никогда не храните критически важные для бизнеса данные или данные, которые влияют на принятие решений внутренними бизнес правилами web приложения в данных view state: View state это просто другое скрытое поле страницы и оно может легко декодироваться и просматриваться. Если свойству страницы EnableViewStateMAC задано значение true, то view state будет подписываться с помощью кода аутентификации сообщений, который создается на основе machine key заданного в файле machine.config web сервера. Рекомендуется задавать EnableViewStateMAC=true, каждый раз, когда вы включаете данные в view state, которые не могут быть изменены пользователями просматривающими вашу web страницу. Используйте SSL при использовании базовой аутентификации или аутентификации с помощью ASP.NET форм. Защищайте ваши куки: при использовании аутентификации с помощью форм всегда защищайте ваши куки, которые указывают на аутентификацию пользователя и устанавливайте timeouts как можно короче и настолько длинным, насколько это необходимо. Используйте SSL: в общем случае, если web приложение обрабатывает важные данные, то обезопасьте весь web сайт с помощью использования SSL. Не забудьте защитить даже папки с картинками (image directories) или папки с другими файлами не обрабатываемыми приложением напрямую через SSL.
Рекомендации Никогда не храните важные для бизнеса данные во view state: View state это просто скрытое поле на странице и оно может легко раскодироваться и просматриваться. Используйте установку EnableViewStateMAC = true для страницы, в этом случае view state будет шифроваться с помощью message authentication code, который создается на основе machine key из файла machine.config на web server. Рекомендуется использовать установку EnableViewStateMAC=true, если во view state включаются данные, которые не должны меняться пользователем, который просматривает страницу. Используйте интерфейс SSL (Secure Sockets Layer) при использовании Базовой аутентификации или ASP.NET аутентификации на основе форм. Защищайте свои cookies: Всегда защищайте куки, используемые для аутентификации, при использовании аутентификации на основе форм, и устанавливайте timeouts настолько короткими, насколько это возможно или настолько длинными, насколько это необходимо. Используйте SSL: Обычно, если web приложение работает с важными данными, то обезопасьте весь website с помощью SSL. Не забудьте защитить даже директории с изображениями и другими файлами, которые не обрабатываются приложением напрямую через SSL.
Межсайтовый скриптинга (XSS). Межсайтовый скриптинг (XSS, Cross Site Scripting) – это уязвимость серверного кода, позволяющая внедрить в генерируемую скриптами на сервере HTML-страницу произвольный код путём передачи его в качестве значения нефильтруемой переменной. Под «нефильтруемой» переменной подразумевается переменная, которая перед её использованием в скрипте не проверяется на наличие запретных символов, таких, как:,, и многих других. Response.Write(Request.QueryString(name)); Например: Щелкни здесь!.
Шаблон приложения «Превратники» - «Gatekeepers» «Gatekeepers» это концептуальный шаблон, который применяется к модели конвейерной архитектуры для инфраструктуры безопасности. Данная модель предполагает, что безопасное приложение всегда имеет больше механизмов обеспечения безопасности, чем это необходимо. Каждый из этих механизмов реализуется в виде привратника (gatekeeper), который ответственен за обеспечение некоторый действий по поддержке безопасности. Если один из привратников не отловит угрозу, злоумышленник будет сталкиваться со следующим привратником в конвейерной архитектуре.
Базовые задачи безопасности Аутентификация (Authentication) – определение того, кто пытается работать с приложением (какой пользователь). Авторизация (Authorization) – определение того, какие операции данному пользователю разрешено выполнять и какие ресурсы ему доступны. Конфиденциальность (Confidentiality) – пока пользователь работает с приложением, необходимо гарантировать, что никто другой не способен видеть важные данные, которые обрабатываются пользователем. Для этого необходимо шифровать канал между браузером пользователя и web сервером. Более того возможно надо шифровать данные хранимые на стороне сервера (или куки на стороне пользователя), если требуется защитить данные от доступа к ним администратора БД и других сотрудников компании провайдера. Целостность (Integrity) – и, наконец, нужно гарантировать, что данные передаваемые между пользователем и сервером не изменяются не авторизованными лицами. Цифровая подпись предоставляет возможность облегчить такой тип угрозы безопасности.
Поддержка безопасности в ASP.Net ASP.NET включает базовую инфраструктуру для выполнения аутентификации и авторизации Базовая библиотека классов.NET Framework включает набор классов пространства имен System.Security для шифрования и подписывания данных SSL является стандартным способом гарантирующим конфиденциальность и целостность данных, передаваемых между браузером клиента и web сервером.
Аутентификация Процесс определения подлинности пользователя и гарантирования достоверности этой подлинности. Данный процесс аналогичен проверке бумажного паспорта пользователя. После проверки идентичности пользователю выдается некоторый талон, который подтверждает прохождение им проверки (identity) (например, посадочный талон в аэропорту) В ASP.Net приложении аутентификация реализуется с помощью одной из следующих систем: –Windows аутентификация –Forms аутентификация –Pasport аутентификация –Специальный (custom) процесс аутентификации В каждой из этих систем пользователь предоставляет свои верительные данные при входе в систему. Под подлинностью (identity) пользователя понимается разное в разных системах идентификации. –Например, в Windows OC используется 96 – битное число, называемое SID (security ID), для идентификации каждого подключенного пользователя. В ASP.Net Forms аутентификации пользователю дается аутентификационный билет, который является комбинацией значений зашифрованных и записанных в куки. Все, что делает аутентификация, это позволяет приложению определить, кто является пользователем в каждом запросе. Это хорошо использовать для процессов персонализации (personalization) и настройки (customization), так как можно использовать информацию о подлинности для передачи специфических для пользователя сообщений на web странице, изменять оформление страниц, добавлять содержание на странице с учетом предпочтений пользователей и т.п.
Имперсонификация (перевоплощение, Impersonation) Это процесс выполнения кода от лица другого пользователя (в контексте подлинности (identity) другого пользователя). По умолчанию весь ASP.Net код выполняется с использованием фиксированного специфической для данного компьютера учетной записи (account). Обычно это ASPNET для IIS 5.x или Network Service для IIS 6.0 и IIS 7.0. Для выполнения кода с использованием другой identity, можно использовать встроенные возможности имперсонификации ASP.Net. Можно использовать имеющийся в системе identity пользователя, если данный пользователь уже был аутентифицирован с помощью учетной записи Windows. Можно использовать имперсонификацию по двум причинам: –Задать каждому web приложению различные права: –Использовать существующие права пользователя Windows.
Авторизация (Authorization) Это процесс определения прав и ограничений для аутентифицированного пользователя. В приложении может использоваться авторизация на основе ролей (role-based authorization). В этом случае авторизация основывается на принадлежности пользователей ролям или группам, а не на основе данных пользователя. Такой вид авторизации прост для реализации В web приложении используются разные типы авторизации на различных уровнях. Например, на самом верхнем уровне код приложения может проверять идентичность пользователя и решать, продолжать ли выполнять некоторую операцию. На более низком уровне, можно сконфигурировать ASP.Net таким образом, чтобы отклонять доступ к некоторым web страницам или директориям для некоторых пользователей или ролей. На еще более низком уровне, при выполнении в приложении различных задач (например, соединений с БД, открытие фалов, запись в журнал событий) OC Windows проверяет разрешения учетной записи Windows, которая выполняет код. В большинстве случаев ASP.Net код выполняется под одной учетной записью (в IIS 5 это учетная запись ASPNET).
Конфиденциальность и целостность ( confidentiality и Integrity ) Конфиденциальность означает, что данные не могут просматриваться не уполномоченными для этого пользователями, во время передачи по сети и хранения в базе данных. Целостность это гарантирование того, что никто не может изменить данные, пока они передаются по сети или хранятся в БД. Они основываются на шифровании данных. Шифрование это процесс кодирования данных таким образом, чтобы они не могли быть прочитаны другими пользователями. В ASP.Net шифрование полностью отделено от аутентификации, авторизации и имперсонификации. Можно использовать их комбинацию. Шифрование используется в web приложении по двум причинам: –Для защиты передачи данных по сети. Для этого используется SSL. SSL также реализует цифровые подписи для гарантирования целостности. SSL реализуется не ASP.Net, а IIS. –Для защиты постоянного хранения данных в БД или файлах.
Порядок аутентификации пользователей Когда пользователи первый раз заходят на web сайт, то они являются анонимными. Web приложение не знает, кто они. Если приложение не аутентифицирует их, они так и останутся анонимными. По умолчанию анонимные пользователи могут получить доступ к любой web странице. Но когда пользователь запрашивает web страницу, к которой не разрешен анонимный доступ, то происходит несколько действий: 1.Запрос отправляется web серверу. Так как личность (identity) пользователя к этому моменту не известна, то пользователя просят подключиться (например, используя собственную web страницу). Конкретные детали процесса подключения зависят от типа используемой аутентификации. 2.Пользователь указывает свои данные, которые затем проверяются или web приложением или автоматически IIS (в случае Windows аутентификации). 3.Если данные пользователя подтверждаются, ему предоставляется доступ к web странице. Если его данные не подтверждаются, то пользователю предлагается подключиться еще раз.
Запрос web страницы, требующей аутентификации
Запрос защищенной web страницы Когда пользователь запрашивает защищенную web страницу, доступ к которой разрешен только конкретным пользователям, или пользователям конкретной роли, то процесс проверки будет аналогично, но выполняется дополнительный шаг: 1.Запрос отправляется web серверу. Так как личность (identity) пользователя к этому моменту не известна, то пользователя просят подключиться (например, используя собственную web страницу или основанный на браузере диалоговое окно подключения - login dialog box). Конкретные детали процесса подключения зависят от типа используемой аутентификации. 2.Пользователь указывает свои данные, которые затем проверяются или web приложением. Это этап аутентификации. 3.Для аутентифицированных пользователей их права (credentials) или роли (roles) сравниваются со списком пользователей или ролей, коорым разрешен доступ к данной странице. Если пользователь есть в этом списке, то ему предоставляется доступ к ресурсу; в противном случае в доступе отказывается. 4.Пользователи, которым было отказано в доступе предлагается или подключиться заново (log in again) или они перенаправляются на страницу с сообщением о том, что «В доступе отказано» (access denied message).
Запрос web страницы, требующей авторизации
Безопасность Internet Information Services Прежде чем ASP.Net среда выполнения получит пришедший запрос, IIS сама выполняет проверку безопасности. IIS предоставляет две важных средства проверки безопасности: –Аутентификация: Результатом любой IIS аутентификации, заканчивается определением учетной записи пользователя Windows. Т.е. IIS поддерживает только зарегистрированных в Windows пользователей. IIS поддерживает Базовую аутентификацию Digest аутентификацию Passport аутентификацию Windows аутентификацию Certificate аутентификацию по каналу SSL. –Авторизация: IIS предоставляет встроенную поддержку ограничений на IP адреса и оценку Windows ACL (Access Control Lists), что является способом защиты ресурсов, поддерживаемым ОС. –Конфиденциальность: шифрование может быть усилено с помощью SSL.
Аутентификация в IIS 5.x и IIS 6.0 Если ASP.Net приложение будет использовать Windows аутентификацию, то нужно сконфигурировать IIS на использование Basic (или Digest) аутентификации. Если ASP.Net приложение не будет использовать учетные записи Windows (будет использовать form аутентификацию), то нужно разрешить IIS использовать анонимный доступ.
Аутентификация IIS 5 и 6 Показано, как можно задать метод аутентификации используемый для web приложения
Методы аутентификации Метод "Windows authentication" заставляет IIS сравнивать учетную запись (credentials) пользователя с учетными записями Windows локального компьютера или домена локальной сети. При работе в домене, зарегистрированным пользователям домена не требуется вводить их имена и пароли, если они уже подключились к клиентскому компьютеру сети, так как билет аутентификации пользователя передается на сервер автоматически. Метод "Basic authentication" разработан W3C корпорацией и описывает дополнительный HTTP заголовок (header) для передачи имен и паролей пользователей по сети. Но следует отметить, что ничто не шифруется. Информация передается с использованием кодирования Base64. В связи с этим, можно использовать Basic authentication только вместе с SSL. Как и в случае с Windows authentication, учетные данные введенные пользователем сверяются с учетной запись Windows. Но способ передачи учетных данных по сети различен. В то время, как при Basic authentication информация передается в HTTP header, при Windows authentication используется или протокол NTLM (Windows NT LAN Manager) - простой протокол запроса-ответа аутентификации) или протокол Kerberos. Метод "Digest authentication" аналогичен "Basic authentication". Вместо отправки по сети учетных данных, кодированных с помощью Base64, он хеширует пароль пользователя и передает хешированные данные по сети. Этот метод используется редко, кроме контролируемых сред, (таких как интранет).
Метод "Passport authentication" использует в качестве базовой инфрасруктуры Microsoft Passport. Microsoft Passport реализует централизованное управление распознаванием (идентичностью). В этом случае учетные данные пользователя управляются специальным сервером - Passport server. Хотя обычно эта инфраструктура реализуется на серверах Microsoft, можно установить и свою собственную Passport инфраструктуру. В консоле управления, как.NET Passport authentication, но это обобщенный механизм аутентификации, который не связан с самой.NET Framework. В настоящее время не следует использовать Passport authentication, так как она заменена "Windows Live ID", которая является частью платформы Windows Live. Windows Live ID основывается на той же концепции централизованно хранимых ID, но реализована на много более открытой платформе, чем среда Passport. IIS также поддерживает еще один дополнительный метод аутентификации - certificate authentication, который конфигурируется посредством SSL.
Авторизация IIS 5 и 6 Показано, как можно задать ограничения на адреса IP которым разрешен доступ с помощью IIS. Ограничения на IP адреса позволяют ограничить доступ к web серверу только компьютерами заданными в списке. Это имеет смысл, если нужно разрешить доступ только нескольким партнерам по бизнесу к вашему web серверу.
Сравнение IIS 5(6) и IIS 7
Архитектура безопасности ASP.Net Используется концепция Gatekeepers Набор HTTP модулей. Каждый модуль это класс реализующий интерфейс IHttpModule
Secure Sockets Layer (SSL)
ASP.Net аутентификация Выполняется с помощью специализированных HTTP модулей, которые реализуют интерфейс IHttpModule и обрабатывают событие HttpApplication.AuthenticateRequest. Каждый модуль также инициирует свое собственное событие Authenticatу, обработку которого можно описать в Gloabal.asax файле. можно Конкретный модуль выбирается с помощью элемента в web.config файле корневой папки web приложения. ASP.NET предоставляет три базовых модуля аутентификации: –FormsAuthenticationModule –WindowsAuthenticationModule –PassportAuthenticationModule
События безопасности При поступлении каждого запроса к Web приложению инициируется набор событий безопасности Можно создать обработчики этих событий в Global.asax Или написать свой HTTP модуль
ASP.Net методы аутентификации Модуль FormsAuthenticationModule использует аутентификации с помощью форм, что позволяет разработчику создать свою собственную страницу подключения (login page) и написать свою собственную логику аутентификации, но дать возможность ASP.Net отслеживать информацию о пользователях и ролях с помощью шифрованных куки. Данный модуль аутентификации становится активным, когда описан следующий элемент конфигурации Два других модуля аутентификации:
ASP.Net авторизация После аутентификации пользователя, информация о нем, такая как имя контекст безопасности (security context) автоматически становится доступной ASP.NET инфраструктуре. Можно получить доступ к этой информацию с помощью объекта HttpContext.Current.User и использовать ее для реализации авторизации в своем коде. ASP.NET включает следующие заранее разработанные модули для реализации авторизации: UrlAuthorization: данный модуль основывается на содержании элемента конфигурационного файла web.config в различных папках web приложения. Он может ограничить доступ к папкам и файлам на основе имени или ролей пользователя.. FileAuthorization: при использовании Windows аутентифкации в интранет, ASP.NET автоматически использует модуль FileAuthorization для авторизации доступа пользователей Windows на основе Windows ACL (списков доступа). В этом случае, пользователи Windows должнны иметь, по крайней мере, права на чтение (read access rights) файлов, составляющих web приложение. Этот модуль работает только с Windows аутентификацией – но без персонификации. Кроме этого можно реализовать авторизацию с помощью своего кода в web страницах или компонентах, которые используются web приложением. В этом случае используется объект HttpContext.Current.User и принимается решение на основе членства в ролях (role membership) или непосредственно на основе имени пользователя.
Авторизация и роль (Authorization and Roles) Авторизация это процесс определения того, имеет ли пользователь достаточно прав для выполнения требуемого действия (получения web страницы, получения доступа к ресурсу, контролируемому ОС), выполнение специфической для приложения задачи (например, размещение заказа)). URL Authorization – наиболее простой способ задать разрешения безопасности на конкретную web страницу, web сервис, или поддиректорию. ASP.Net поддерживает декларативные правила авторизации, которые задаются в web.config.
Основы Forms Authentication
Данный способ основан на билетах (ticket или token). Когда пользователи подключаются, они получают билет (ticket) с основной информацией о пользователе. Эта информация сохраняется в шифрованном куки, который прикрепляется к ответу на запрос, и таким образом передается с каждым последующим запросом. Когда пользователь запрашивает web страницу, которая не доступна анонимному пользователю, то ASP.Net проверяет наличие билета. Если его нет, то ASP.Net автоматически перенаправляет пользователя на странице подключения (login page). Программист должен создать такую страницу и проверить данные занесенные пользователем на странице подключения. Если данные успешно пройдут проверку, то нужно сообщить инфраструктуре ASP.Net об успехе (вызвав метод класса FormsAuthentication) и среда автоматически задаст значения для куки аутентификации (который реально содержит билет - ticket) и перенаправит пользователя на ранее запрашиваемую страницу. При обработке этого запроса среда определит, что куки аутентификации с ticket доступен.
Достоинства Используется, если есть причины не использовать в приложении учетные записи Windows. Достоинства использования Form Authentication –Имеется полный контроль над процессом аутентификации; –Имеется полный контроль над видом страницы подключения (login form); имеются стандартные элементы подключения (Login control). –Может работать с любым браузером, так как использует стандартный HTML; –Позволяет самому определить способ хранения информации о пользователе. Используется своя страница подключения (login page), которая проверяет имя и пароль пользователя в собственной БД приложения. Затем инфраструктура задает контекст безопасности для каждого последующего запроса (во многих случая используя куки).
Хранение информации о пользователях Метод Forms Authentication по умолчанию хранит описание пользователей в файле web.config. Однако можно хранить эту информацию в любом месте. Для этого нужно написать код чтения требуемых данных. При использовании membership API, даже не требуется писать собственный код для хранения информации о пользователях в базе данных. Такая гибкость хранения информации позволяет управлять созданием и администрированием учетными записями пользователей. –Можно добавить дополнительную информацию о пользователях, например, предпочтения пользователей по внешнему виду web сайта. –Можно добавить специфическую для бизнеса информацию, например, шифрованную информацию о кредитных карточках, если создается он-лайн магазин. В дополнение к membership API в ASP.Net введен profiles API, который позволяет хранить дополнительную информацию пользователей отдельно от их учетных записей.
Реализация Forms Autentification 1. Настроить аутентификацию с использованием форм в файле web.config 2. Сконфигурировать IIS, чтобы разрешал анонимный доступ к виртуальному каталогу и скофигурировать ASP.Net для ограничения анонимного доступа к web приложению. 3. Создать собственную страницу подключения (login page), которая собирает и проверяет имя и пароль пользователя, а затем проверяет их и сообщает среде аутентификации о результате проверки.
Конфигурирование Forms Authentification Общий вид Все данные задание описаний пользователей
Параметры Forms Authentication Параметр По молчанию Описание name.ASPXAUTHИмя HTTP куки. Каждое приложение должно иметь уникальное имя куки безопасности. loginUrllogin.aspxИмя страницы на которую перенаправляется пользователь для подключения. Это должна быть страница в корневой папке приложения. timeout30Количество минут, прежде чем authentication cookie станет не действительным. ASP.NET обновляет куки при его получении, если прошло более половины времени жизни куки. cookielessUseDeviceProf ile Использовать ли куки для отправки forms authentication ticket клиенту. Возможные значенияAutoDetect, UseCookies, UseUri и UseDeviceProfile.
Хранение учетных записей в web.config Задание способа аутентификации и авторизации
Хранение учетных записей в web.config
Хранение учетных записей в web.config Самый простой способ хранения учетных записей это файл конфигурации web.config:
Хеширование паролей в web.config В разделе элемента формат пароля задается с помощью атрибута passwordFormat, который может иметь следующие значения: Clear - пароль хранится в виде текста в элементе MD5 - пароль хранится в хешированном виде с использованием алгоритма MD5. SHA1 - пароль хранится в хешированном виде с использованием алгоритма SHA1. Данное значение используется по умолчанию.
Сохранение хешированного пароля string hashedPwd = FormsAuthentication.HashPasswordForStoringInConfigFile(cl earTextPassword, "SHA1"); Пароль сохраняется в web.config или в базу данных Программное редактирование данных о пользователях в web.config Configuration MyConfig = WebConfigurationManager.OpenWebConfiguration("~/"); ConfigurationSectionGroup SystemWeb = MyConfig.SectionGroups["system.web"]; AuthenticationSection AuthSec = (AuthenticationSection)SystemWeb.Sections["authentication"]; AuthSec.Forms.Credentials.Users.Add( new FormsAuthenticationUser(UsernameText.Text, PasswordText.Text)); MyConfig.Save();
Отказ в доступе анонимным пользователям Для отказа в доступе для всем не аутентифицированным пользователям используется элемент конфигурации в котором добавляется новое правило авторизации: Символ (?) обозначает всех анонимных пользователей. Заданное правило говорит о том, что анонимные пользователи не разрешены. Каждый пользователь должен быть аутентифицирован и в каждом запросе буде требоваться forms authentication ticket (который является куки). Иначе ASP.NET будет перенаправлять запрос к login page (что может вызвать ошибку, если такая страница еще не создана). В отличии от элемента, элемент не ограничен только файлом web.config в корневой папке web приложения. Можно использовать этот элемент в любой подпапке web приложения.
Отказ в авторизации незарегистрированных пользователей
Правила авторизации Правила авторизации задаются в элементе раздела файла web.config.
Управление доступом к конкретной папке web-приложения Обычным подходом является размещение файлов, которые требуют авторизации в отдельную папку. С помощью ASP.NET файлов конфигурации этот подход просто выполняется. Просто оставьте элемент в обычной родительской папке пустым и добавьте файл web.config, который задает строгие установки в папке, которая содержит секретные ресурсы. Помните, что когда добавляется файл web.config в подпапку, она должна содержать специфические для приложения установки по авторизации. Например, она может содержать только информацию по авторизации, такую как:
Управление доступом к конкретным файлам
Управление доступа для конкретных ролей
Подключение пользователей к web приложению
IIS 7.0 и Forms Authentication В IIS7 имеется новая консоль управления. С помощью консоли управления IIS7 можно настраивать параметры web.config (а можно и вручную). Можно сконфигурировать forms authentication с помощью IIS7. –Включить режим –Задать правила аутентификации.
Включение form authentication
Запрет анонимного доступа
Прикладной программный интерфейс
Основные классы Forms Authentication FormsAuthentication – основной класс для работы со инфраструктурой forms authentication. Предоставляет базовую информацию о конфигурации и позволяет создать ticket, установить cookie, и выполнит перенаправление с login page к запрашиваемой страпнице, если проверка учетных данных закончилась успешно. FormsIdentity – реализация интерфейса IIdentity для forms authentication. Основной особенностью является свойство Ticket, которое возвращает forms authentication ticket. Это позволяет хранить и получать дополнительную информацию о ticket.
Класс FormsAuthentication Статический класс с набором методов для подключения и отключения пользователя от web приложения. Основной класс для работы со инфраструктурой forms authentication. Предоставляет базовую информацию о конфигурации и позволяет создать ticket, установить cookie, и выполнит перенаправление с login page к запрашиваемой страпнице, если проверка учетных данных закончилась успешно.
Создание страницы подключения
Обработка подключения пользователя Обработка события Click для кнопки на форме подключения: protected void LoginAction_Click(object sender, EventArgs e) { Page.Validate(); if (!Page.IsValid) return; if (FormsAuthentication.Authenticate(UsernameText.Text, PasswordText.Text)) { // Create the ticket, add the cookie to the response, // and redirect to the originally requested page FormsAuthentication.RedirectFromLoginPage(UsernameText.Text, false); } else { // User name and password are not correct LegendStatus.Text = "Invalid username or password!"; }
Методы класса FormsAuthentication Метод Authenticate(UsernameText.Text, PasswordText.Text) Подключает пользователя к приложениию и возвращает true если пользователь прошел аутентификацию, иначе false. Метод RedirectFromLoginPage(UsernameText.Text, false); Выполняет следующие действия: 1.Создает для пользователя authentication ticket. 2.Шифрует информацию authentication ticket. 3.Создает куки для хранения шифрованной информации ticket. 4.Добавляет куки к HTTP response, для отправки его пользователю. 5.Перенаправляет пользователя на запрашиваемую страницу (которая содержится в параметре строки запроса при переходе к странице подключения). Метод SignOut(); выполняет отключение от приложения Метод RedirectToLoginPage(); выполняет переход к странице с подключением.
Отключение пользователя protected void SignOutAction_Click(object sender, EventArgs e) { FormsAuthentication.SignOut(); FormsAuthentication.RedirectToLoginPage(); }
Контекст безопасности (Security Context) Независимо от используемого метода аутентификации, ASP.Net использует одну и ту же модель представления информации о пользователях и ролях. С пользователями, которые подключились к web приложению связываются объекты principal и identity, на основе предоставленных ими регистрационных данных. Объект principal представляет текущий контекст безопасности (security context) пользователя. Он объединяет объект identity данного пользователя и информацию о его роли, привилегиях и т.п. хранимую в учетной записи. Это позволяет выполнять авторизацию основанную на ролях и предоставляет ссылку на соответствующий объект идентификации (identity). Объект идентификации представляет успешно аутентифицированного пользователя и содержит информацию о пользователе, например, имя пользователя.
Интерфейс IPrincipal Все principal объекты реализуют интерфейс IPrincipal, который описывает базовый набор функциональности. При работе со свойством User текущей web страницы или текущего HTTP контекста (HttpContext.Current) используется объект IPrincipal, который представляет контекст безопасности текущего пользователя. Интерфейс IPrincipal включает: –свойство Identity, которое ссылается на объект IIdentity, содержащий информацию о текущем пользователе. –метод IsInRole() – проверка принадлежности пользователя к некоторой роли. Например: if (HttpContext.Current.User.IsInRole("Admin")) { // (Do something.) } Такой объект создается автоматически, но его можно создать и программно, например, на основе информации из базы данных.
Интерфейс IIdentity Данный интерфейс определяет основную информацию, описывающую текущего пользователя. Он включает следующие основные свойства: –AuthenticationType: используемый тип аутентификации в виде строкм (forms, Passport, NTLM, или custom). –IsAuthenticated: true если пользователь аутентифицирован иначе false. –Name: имя текущего пользователя в виде строки. Можно получить объект IIdentity, который представляет текущего пользователя с помощью объекта IPrincipal. Например: if (HttpContext.Current.User.Identity.IsAuthenticated) { lblUserName.Text = HttpContext.Current.User.Identity.Name + " is logged in"; } Тип объекта идентификации зависит от типа используемой аутентификации: Например: –System.Web.Security.FormsIdentity: для пользователей подключившихся с использованием аутентификации форм. – System.Security.Principal.WindowsIdentity: для пользователей подключившихся с использованием учетной записи Windows
Свойство User в классе Page Пространство имен System.Security.Principal Свойство User возвращает объект класса Рrincipal, который описывает контекст безопасности пользователя, от чьего имени выполняется код, включая данные учетной записи и все его роли. User имеет: –Свойство Identity (объект класса Identity) Name, IsAuthenticated, AuthenticationType; –Метод проверки принадлежности роли boolbool IsInRole( string role ).string
Классы Principal и Identity Класс Principal включает: –свойство Identity, которое ссылается на объект Identity, содержащий информацию о текущем пользователе. –метод IsInRole() – проверка принадлежности пользователя к некоторой роли. Класс Identity dключает следующие основные свойства: –AuthenticationType: используемый тип аутентификации в виде строкм (forms, Passport, NTLM, или custom). –IsAuthenticated: true если пользователь аутентифицирован иначе false. –Name: имя текущего пользователя в виде строки.
Проверка роли пользователя Все Principal объекты имеют метод IsInRole(), который позволяет проверить принадлежность пользователя к группе. Этот метод принимает имя роли и возвращает true если пользовательявляется участником данной роли. Например:: if (User.IsInRole("Supervisors")) { // Do nothing, the page should be accessed as normal because the // user has administrator privileges. } else { // Don't allow this page. Instead, redirect to the home page. Response.Redirect("default.aspx"); }
Использование класса PrincipalPermission try { PrincipalPermission pp = new pp.Demand(); // If the code reaches this point, the demand succeeded. // The current user is an administrator. } catch (SecurityException err) { // The demand failed. The current user isn't an administrator. }
ASP.NET 3.5 предоставляет controls, классы и управляющие утилиты для аутентификации (authenticating) пользователей с Web forms и затем сохранения информации пользователей в базе данных, позволяя отслеживать и аутентифицировать пользователей без использования Active Directory или локальной БД пользователей Windows. До появления.NET Framework 2.0 аутентификация пользователей требовала создания многих сложных компонент: –Страницы подключения (login page). –Базу данных пользователей –Программу управления учетными записями пользователей. –Программу управления паролями.
Управление учетными записями (членством), ролями и профилями (Membership, Roles, and Profile)
API для управления членством и ролями (Membership и Roles API) Для выполнения аутентификации (проверки имен и паролей пользователей) можно использовать специальные API. Membership API – полная система управления данными о пользователях. Помогает создавать, редактировать и удалять пользователей, а также включает возможность восстановления паролей. Roles API – во многих случаях авторизация выполняется на основе групп пользователей, которые называются ролями (roles)/ К одной группе может быть отнесено много пользователей и отдельный пользователь может быть отнесен ко многим группам. Profiles API – возможность хранить данные, связанные с конкретным пользователем. Для этого используются профайлы (user profile) пользователей, которые позволяют хранить данные пользователей между сеансами их работы с web приложением. Основное различие между профайлами пользователя и состоянием сеанса работы заключается в том, что профайлы хранятся в течении множества сеансов работы.
Основные понятия Membership – членство, учетные записи зарегистрированных пользователей с описанием их идентификаторов и паролей. Roles – группы пользователей с описанием их прав авторизации. Profiles – профили пользователей – с описанием связанных с ними набора данных.
Интерфейс Membership API
Учетные записи - Membership Возникают стандартные задачи управления учетными записями. Для их решения создано membership API. Это среда основанная на существующей инфраструктуре Forms Authentication. При использовании этого API не требуется реализовывать страницы подключения и хранилище учетных записей (login pages и credential storage). Membership API предоставляет возможность проверять и хранить регистрационные данные пользователей. Т.е. помогает управлять аутентификацией пользователей.
Возможности ASP.Net Membership API Способность создавать и удалять пользователей программно или с помощью конфигурационной утилиты. Возможность восстанавливать пароли, с возможностью автоматической отправки восстановленного пароля пользователю по (если задан адрес). Возможность автоматически генерировать для пользователей пароли, если эти пользователи создаются программно. Эти пароли могут автоматически отсылаться пользователям, если задан адрес . Возможность находить пользователей в БД и получать список всех пользователей и их данные. Это необходимо для обычных задач управления, таких как назначение роли пользователя с помощью интерфейса управления или для создания статистики о количестве пользователей web приложения. Имеется набор специальных ЭУ для создания –страниц подключения (login pages) –страниц регистрации новых пользователей (registration pages) –Для отображения состояния подключения и различных представлений для пользователей прошедших и не прошедших аутентификацию. Уровень абстракции для приложения, чтобы оно не зависело от используемого хранилища данных с помощью классов провайдеров членства (membership provider classes). Вся функциональность API работает независимо от базового хранилища данных, которое может быть заменено на другой тип без изменения кода. По умолчанию, membership API использует БД SQL Server Express для хранения описания пользователей и их ролей.
Архитектура Membership API
Основные класс Membership API Определены в пространстве имен - System.Web.Security КлассОписание MembershipОсновной класс для работы с membership API. Включает методы для управления пользователями (users), проверки пользователей (validating users) и изменения паролей пользователей. MembershipUserСоответствует одной учетной записи пользователя в в хранилище membership API. Объект данного класса содержит всю информацию, о данном пользователе и создается с помощью метода GetUser класса Membership. MembershipUser Collection Коллекция зарегистрированных пользователей. Объект данного класса можно получить с помощью метода GetAllUsers класса Membership.
Membership провайдеры КлассОписание SqlMembershipPr ovider Реализация класса MembershipProvider, который работает с БД SQL Server. ActiveDirectoryMe mbershipProvider Реализация класса MembershipProvider, который работает с Active Directory.
Статический класс Membership Методы класса Membership выполняют следующие базовые операции: –Создание новых пользователей –Удаление существующих пользователей –Обновление информации существующих пользователей –Получение списка всех пользователей –Получение полной информации для заданного пользователя –Проверка регистрационных данных пользователя в хранилище данных
Основные методы класса Membership GetUser - возвращает MembershipUser объект, который представляет текущего пользователя. Вызывайте этот метод всегда, когда нужен доступ к учетной записи текущего пользователя. ValidateUser – Проверяет верны ли введенные пользователем user name и password. Используется для проверки регистрации пользователя, если создается свой собственный элемент управления login. FindUsersBy – получить коллекцию membership пользователей, адреса которых содержат заданный адрес. FindUsersByName - получить коллекцию membership пользователей, имена которых совпадают с заданным шаблоном. GeneratePassword – создать случайным образом пароль заданной длины.
GetAllUsers – получить коллекцию всех зарегистрированных в базе данных пользователей. GetNumberOfUsersOnline – получить всех подключенных в данны1 момент пользователей. GetUserNameBy – получить имя пользователя у которого адрес совпадает с заданным адресом. UpdateUser – обновить информацию текущего пользователя в базе данных.. CreateUser – добавить пользователя в базу данных DeleteUser – убрать пользователя из базы данных.
Примеры вызова методов Проверка пользователя в хранилище данных: Membership.ValidateUser(UserNameText.Text, PasswordText.Text) Создание нового пользователя: MembershipCreateStatus Status; Membership.CreateUser(UserNameText.Text, PasswordText.Text, User Text.Text, PwdQuestionText.Text, PwdAnswerText.Text, true, out Status);
Класс MembershipUser Представляет одного membership пользователя в membership хранилище данных Основные свойства –UserName – –Comment –CreationDate –PasswordQuestion –LastLoginDate –Comment –CreationDate Основные методы: –GetPassword() –ChangePassword()
Интерфейс Roles API
Использование Roles API для Role-Based Authorization ASP.NET включает готовую к использованию инфраструктуру для управления и использования ролей с membership API. Подробнее, инфраструктура ролей включает следующее: –Основанный на провайдерах расширяемый механизм для подключения разных типов хранилищ, для хранения данных о ролях. –Готовые к использованию провайдеры для SQL Server и описание необходимых таблиц, на основе БД Membership. Эти таблицы связывают описания пользователей с ролями на основе many-to-many отношений и автоматически создаются, при вызове утилиты aspnet_regsql.exe. –Автоматически создается и инициализируется, для аутентифицированного с помощью модуля RoleManagerModule, объект класса RolePrincipal. –Предоставляется полный программный доступ к ролям с помощью класса Roles.
Подключение ролей для web приложения Подключить роли можно либо с помощью задания Enable Roles для данного Web Site при выполнении Security Setup Wizard или выбрав ссылку Enable Roles в панели Security инструмента WAT. В любом случае в конфигурационный файл добавляются следующие параметры
Когда API подключен, RoleManagerModule автоматически создает экземпляр RolePrincipal, который содержит как identity аутентифицированного пользователя, так и роли пользователя. RolePrincipal является просто реализацией интерфейса IPrincipal, который является базовым интерфейсом для всех principal классов. И следовательно поддерживает всю функциональность, такую как получение identity пользователя и метод проверки принадлежности пользователя заданной роли с помощью метода IsInRole(). Кроме этого он использует пару дополнительных свойств для получения дополнительной информации о principal. Эти свойства можно использовать для получения информации из экземпляра, а также выполнения проверки авторизации вызывая метод IsInRole().
Статический класс Roles Основные методы: CreateRole(roleName) – добавить новую роль в системе; DeleteRole(roleName) – удалить роль из системы; AddUserToRole(userName, roleName) – добавить пользователя к роли (задать роль пользователя); IsUserInRole(roleName) / IsUserInRole(userName, roleName) – проверить, обладает ли пользователь заданной ролью (true – да; false - нет). GetAllRoles() – массив всех ролей в системе. GetRolesForUser() / GetRolesForUser(userName) – массив всех ролей зарегистрированного / заданного пользователя. if (!Roles.IsUserInRole(EveryoneRoleName) && Roles.RoleExists(EveryoneRoleName)) { Roles.AddUserToRole(User.Identity.Name, EveryoneRoleName); }
AddUserToRole – добавляет заданного пользователя (user name) к заданной роли (role name); параметры имеют тип string. CreateRole – создание новой роли. DeleteRole – удаление существующей роли. FindUsersInRole – принимает строку с именем роли и шаблон строки для имени пользователя. Возвращает список пользователей, которые связаны с данной ролью и соответствуют заданному шаблону (usernameToMatch). IsUserInRole – возвращает true, если заданный пользователь является членом заданной роли. RemoveUserFromRole – удалаеят пользователя из заданной роли. RoleExists – возвращает true, если заданная роль существует.
Разработка web приложения с использованием аутентификации и авторизации
Для использования этой инфраструктуры вначале необходимо ее подключить. Это можно сделать или установив поле Enable Roles for This Web Site, при выполнении шагов в Security Setup Wizard или сделав щелчок на ссылке Enable Roles в панели Security программы WAT. Ниже показаны обе эти возможности.
Создание web-сайта с управлением пользователями 1.Создайте структуру Web сайта. Если часть вашего Web сайта требует аутентификации или членства в специальной роли, то поместите страницы, которые должны быть защищены в отдельную папку. Если аутентификация не обязательная (например, форум пользователей, в котором не зарегистрированный пользователь может просматривать сообщения, но не может добавлять новые), отдельная папка не требуется. 2.Сконфигурируйте ASP.NET Membership. 3.Создайте роли, которые соответствуют группам пользователей. 4.Можно создать пользователей и добавить их к требуемым ролям. 5.Создайте правила доступа для управления тем, к каким папкам пользователи и роли имеют доступ. 6.Задать параметры протокола Simple Mail Transport Protocol (SMTP) для выполнения оповещения по почте и восстановления паспорта. Это можно сделать из панели Application в Web Site Administration Tool. 7.Создать страницу подключения используя Visual Studio.
Использование Membership API Прежде чем использовать ASP.NET membership API и ЭУ по безопасности нужно выполнить следующие действия: 1. Сконфигурировать forms аутентификацию в файле web.config и отказать в доступе анонимным пользователям. 2. Задать хранилище для membership данных. Например, если используется SQL Server, то нужно создать пару таблиц и хранимые процедуры БД SQL Server. 3. Сконфигурировать используемые строку соединения и провайдера membership, в конфигурационном файле приложения web.config. 4. Создать пользователей в хранилище membership используя конфигурационную web утилиту или используя собственную страницу администрирования, которую можно создать в своем приложении с помощью membership API functions. 5. Создать страницу подключения (login page), которая использует имеющиеся Login ЭУ или создать login page, которая использует класс Membership для проверки введенных пользователем данных и аутентификации пользователей. Можно выполнить все эти действия (кроме конфигурирования провайдера) с помощью ASP.NET WAT, который включает мастер безопасности (security wizard). Нужно выбрать команду Web Site -> ASP.NET Configuration в Visual Studio.
Конфигурирование ASP.NET Membership 1.Создайте ASP.NET Web application используя Visual Studio. Если планируется иметь отдельные папки для различных групп (например, папку к которой имеется доступ только у аутентифицированных пользователей или папку для страниц администратора приложения), то создайте вначале эти папки. 2.В разделе меню Website выберите команду ASP.NET Configuration. 3.Выберите панель (или ссылку) «Security» (Безопасность) и нажмите «Use The Security Setup Wizard» (Использовать мастер настройки безопасности …) для пошагового конфигурирования аутентификации и авторизации. 4.На первом шаге 1, нажмите Next. 5.На шаге 2, выберите «From The Internet» (через Интернет) для использования ASP.NET membership (как показано на следующем слайде) или выберите «From A Local Area Network» (По локальной сети) для использования Windows аутентификации. Нажмите Next. 6.На шаге 3, мастер покажет сообщение о том, что информация пользователей будет сохраняться с использованием Advanced Provider Settings. По умолчанию информация о членстве хранится в файле базы данных Microsoft SQL 2005 Server Express Edition в папке App_Data создаваемого Web сайта. Нажмите Next.
Конфигурирование ASP.NET Membership (продолжение) 7. На шаге 4, мастер спросит о создании ролей. Роли это фактически группы членов, которые могут потребоваться в большинстве сценариев поддержки членства. Для создания ролей нужно задать флажок «Enable Roles For This Web Site». Затем нажмите Next. 8. Если выбрано создание ролей, то мастер покажет страницу, на которой можно создать роли. Например, можно создать роли для Users и Administrators. После этого нажмите Next. 9. На шаге 5, можно создать учетные записи пользователей вводя требуемую информацию и затем нажимая «Create User». Пользователей можно будет добавить и позже. После создания учетных записей нажмите Next. 10. На шаге 6, добавьте правила доступа для указания того, к каким папкам имеют доступ пользователи и роли. Затем нажмите Next. 11. На шаге 7, нажмите «Finish». После этого вы вернетесь к панели «Security» в Web Site Administration Tool, где можно управлять пользователями, ролями и правилами доступа.
Автоматическое создание хранилища данных Если ASP.NET используется на компьютере с SQL Server Express Edition, то не даже нужно создавать хранилище данных и конфигурировать membership провайдера. Нужно просто перейдите на страницу Безопасность (Security) в WAT и начните добавлять пользователей в хранилище учетных записей. Требуемой хранилище данных будет создано автоматически при создании первого пользователя. Такая функциональность предоставляется с помощью провайдера SqlMembershipProvider. Однако это работает только с SQL Server 2005 Express Edition! Если используется другой SQL Server, то нужно сконфигурировать хранилище данных вручную. Новый файл базы данных с именем ASPNETDB.MDB создается в специальной подпапке web приложения App_Data. В этой базе данных создается полная схема, которая необходима для хранения и управления информации об –учетных записях пользователя; –ролях пользователей; –отнесении пользователей к ролям; –данных персонализации и профайлы пользователей.
После подключения инфраструктуры, ASP.NET автоматически создает БД в виде MDB файла ASPNETDB.MDF, в папке web приложения App_Data. Если требуется использовать собственное хранилище, то необхождимо выполнить следующие шаги: 1.Создать хранилище данных с помощью или aspnet_regsql.exe или выполняя командный скрипт TSQL, который хранится в папке.NET Framework. 2.Сконфигурировать провайдер ролей для использования ранее созданное собственное хранилище данных. 3.Можно сконфигурировать провайдер ролей с помощью тэга. 4.Можно использовать или другую БД или полностью другой тип хранилища. 5.Дополнительно можно сконфигурировать некоторые свойства с помощью тэга, которые не могут быть установлены в программе WAT.
Ручное создание хранилища данных В ASP.Net имеется утилита aspnet_regsql.exe для создания базы данных web приложения для работы с учетными записями. Два интерфейса –Wizard interface (мастер) –Интерфейс командной строки Имеется скрипт InstallCommon.sql для создания БД sqlcmd -S (local)\SQLExpress -E -i InstallCommon.sql
Wizard интерфейс утилиты aspnet_regsql.exe
Параметры утилиты aspnet_regsql.exe ПараметрОписание -S имяЗадает имя SQL Server -U имяИмя пользователя БД. -P pswЕсли задан -U, то нужно задать пароль. -d-dПозволяет указать имя базы данных, в которую нужно записать таблицы. Если не задано, то создается БД с именем aspnetdb. -EЕсли не задано -U и -P, то выполняется соединение с SQL сервером с использованием учетной записи Windows. -CПозволяет указать полную строку соединения с использованием ODBC или OLEDB. -AУстановит сервисы приложения. Правильные значени: m, r, p, c и w. Здесь: m - утановить membership; r - становить role сервисы, p - profiles, c – персонализация web part страниц, w - SQL web event provider.
Конфигурирование строки соединения и провайдера Задание строки соединения Описание провайдера
Создание и аутентификация пользователей Для создания нового пользователя в созданном хранилище провайдера membership –запустить WAT выбрав команду Website -> ASP.NET в Visual Studio –перейти к панели Безопасность (Security) –выбрать пункт Create User. После создания пары пользователей можно проверить таблицы aspnet_Users и aspnet_Membership после соединенияс базой данных с помощью: –Visual Studio Server Explorer (который потребует добавления нового соединения с membership базой данных в Server Explorer) –SQL Server Management Studio В таблице aspnet_Membership значения пароля (password) и ответа для восстановления пароля (password question) хранятся в шифрованном виде если выбрана опция passwordFormat="Hashed" для провайдера в разделе секции конфигурирования файла web.config.
Конфигурирование учетных записей в IIS 7.0 Конфигурирование Провайдерами и Пользователями
Управление пользователями непосредственно из IIS 7.0
Создание пользователей с помощью программы WAT
Запуск администрирования веб- узлом
Выбор типа проверки подлинности
Подключение ролей
ЭУ для подключения к web приложению Login – интерфейс пользователя, который позволяет ввести имя и пароль, а также согласия автоматической аутентификации при следующем подключении к системе. Можно использовать Login control с системой управления пользователями ASP.NET, без написания строки кода или можно написать свой код аутентификации добавив обработчик события Authenticate. LoginView – позволяет показывать разную информацию для подключенных пользователей. Например, можно использовать эту страницу для отображения информации, которая доступна только аутентифицированным пользователям. LoginStatus – ссылку на login для пользователей, которые не были аутентифицированы и ссылку на logout для подкулюченных пользователей. LoginName – показывает текущее имя пользователя, если он подключен к системе. PasswordRecovery - позволяет восстановить пароль для пользователей, путем отправки сообщения или при ответе пользователя на секретный вопрос. CreateUserWizard – собирает информацию о новом пользователе и создает новую учетную запись. ChangePassword – позволяет подключенному пользователю сменить пароль.
Элемент управления Login Предоставляет готовый к использованию интерфейс, который запрашивает имя и пароль пользователя. Включает кнопку Log In для подключения пользователя. При нажатии пользователем кнопки Log In, ЭУ автоматически проверяет имя и пароль пользователя с помощью membership API function Membership.ValidateUser(), а затем вызывает метод FormsAuthenication.RedirectFromLoginPage(), если проверка прошла успешно. Все опции UI ЭУ Login влияют на введенные данные. Например, если вы установили опцию Remember me next time, то передается значение true для параметра createPersistentCookie метода RedirectFromLoginPage(). И модуль FormsAuthenticationModule создает долговременный куки. Данный ЭУ полностью расширяемый и позволяет переопределить layout стиль и свойства, а также самому обрабатывать события, чтобы изменить стандартное поведение. Он автоматически использует membership provider сконфигурированный для web приложения.
Пример описания ЭУ Login
События ЭУ Login
Обработка событий ЭУ Login protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) ViewState["LoginErrors"] = 0; } protected void LoginCtrl_LoginError(object sender, EventArgs e) { // If the "LoginErrors" state does not exist, create it If(ViewState["LoginErrors"] == null) ViewState["LoginErrors"] = 0; // Increase the number of invalid logins int ErrorCount = (int)ViewState["LoginErrors"] + 1; ViewState["LoginErrors"] = ErrorCount; // Now validate the number of errors if ((ErrorCount > 3) && (LoginCtrl.PasswordRecoveryUrl != string.Empty)) Response.Redirect(LoginCtrl.PasswordRecoveryUrl); }
Создание страницы Login 1. Создайте login page с именем Login.aspx. Если используется другое имя файла, то нужно описать новое имя файла в web.config. 2. На login странице добавить Login ЭУ. Login ЭУ запрашивает у пользователя его данные подключения, как показано на рис. Login ЭУ включает такие id и пароль.
ЭУ подключения пользователя
3.Добавьте ЭУ ValidationSummary на страницу подключения и задайте свойству ValidationSummary.ValidationGroup значение ID элемента управления Login. Этот ЭУ детально описывает сообщения об ошибках, когда пользователь неправильно укажет пароль. 4.Можно добавить на страницу подключения ЭУ PasswordRecovery. Если пользователь забыл пароль, то этот ЭУ позволит пользователю его ID и получить новый, автоматически сформированный пароль по . Пользователю также может быть задан секретный вопрос.
5. Добавьте ЭУ LoginStatus на все страницы сайта. ЭУ LoginStatus дает возможность пользователю перейти к странице подключения, если он еще не аутентифицирован. При использовании master pages, нужно добавить ЭУ LoginStatus на master page. 6.Это все, что требуется сделать, при использовании ASP.NET membership и управлении пользователями с помощью Web Site Administration Tool (WAT), та как ЭУ Login автоматически выполняет аутентификацию. 7.Если пользователь ввел правильные регистрационные данные (credentials), то он регистрируется и такие ЭУ membership, как LoginStatus автоматически отображают это. 8.Если пользователь ввел неправильные данные, то ЭУ Login сообщит о том, что нужно заново ввести данные. 9.Нужно создать обработчик для события Login.LoginError и выполнить запись в журнал безопасности (Security event log). Также следует обрабатывать события PasswordRecovery.UserLookupError и PasswordRecovery.AnswerLookupError. Иначе администратор может не знать о том, что злоумышленники подбирают пароли и имена пользователей.
Создание страницы регистрации новых пользователей 1. Создайте страницу регистрации пользователей, например, с именем NewUser.aspx. 2.Добавьте к странице ЭУ CreateUserWizard. Данный ЭУ будет запрашивать у пользователя имя (name), пароль (password), e- mail, секретный вопрос и секретный правильный ответ. 3.ЭУ CreateUserWizard включает проверку правильности задания пользователем пароля.
Диалог регистрации пользователя
3. Создайте обработчик нажатия кнопки ContinueButtonClick. Как минимум, нужно перенаправить пользователя на страницу, с содержанием доступным для зарегистрированных пользователей, как показано ниже: protected void CreateUserWizard1_ContinueButtonClick(object sender, EventArgs e) { Response.Redirect("Members/Default.aspx"); } По умолчанию, новый пользователь не принадлежит ни к какой роли. Для добавления нового пользователя к роли (к такой, как обычные пользователи Users) необходимо добавить обработчик события CreateUserWizard.CreatedUser и затем вызвать метод Roles.AddUserToRole.
Создание страницы изменения пароля пользователя 1. Создайте страницу управления учетными записями, например, с именем ManageUser.aspx. 2.Добавьте на нее ЭУ ChangePassword 3.Добавьте ЭУ ValidationSummary к вашей странице подключения и задайте свойству ValidationSummary.ValidationGroup значение ID созданного ЭУ ChangePassword. Он детально описывает сообщение об ошибке при событии, когда пользователь забыл ввести пароль или возникла другая ошибка проверки. Например, если пользователь забыл ввести данные в поле Confirm New Password, то ЭУ ChangePassword показывает красные звездочки около этого поля. Если добавить ЭУ ValidationSummary, то он будет показывать сообщение Confirm New Password is required. Однако ошибка ввода неверных регистрационных данных показывается в самом ЭУ Login, а не в ЭУ ValidationSummary. 4. Создать обработчик для события ContinueButtonClick. По краней мере, нужно перенаправить пользователя на страницу с содержанием пользователя.
Использование Membership в Windows Forms Хотя membership API было начально создано для ASP.NET и web приложений, его можно также использовать для приложений, основанных на Windows Forms. Microsoft patterns & practices группа создает последнюю версию Microsoft Enterprise Library (version 3.x) для for the.NET Framework с блоком аутентификации и авторизации.
Для того, чтобы использовать membership API в Windows Forms приложениях, необходимо выполнить следующие шаги: 1.Добавить ссылку на System.Web.dll. 2.Создать БД с помощью aspnet_regsql.exe. 3.Добавить конфигурационный файл приложения app.config. 4.Добавить connection string в app.config файл, которая указывает на membership ДБ. 5.Добавить секцию в файл app.config. 6.Сконфигурировать раздел секции в конфигурационном файле app.config. 7.Запустить приложение и работать с базой данных с помощью классов membership API.
Способы Windows Authentication Когда выбрана Windows аутентификация, то IIS использует одну из трех возможных стратегий для аутентификации каждого получаемого запроса: Basic authentication: The user name and password are passed as clear text. This is the only form of authentication supported by all browsers as part of the HTML standard. Digest authentication: The user name and password are not transmitted. Instead, a cryptographically secure hash with this information is sent. Integrated Windows authentication: The user name and password are not transmitted. Instead, the identity of a user already logged into Windows is passed automatically as a token. This is the only form of authentication that takes place transparently (without user intervention).
Windows аутентификация Причины использования Windows Authentication: –Меньший объем программирования. –Можно использовать существующие учетные записи пользователей (user logins). –Используется единая модель аутентификации для различных приложений. –Позволяет использовать impersonation и Windows security. Причины не использовать –Пользователями могут быть пользователи Windows. –На компьютерах пользователей должна работать ОС Windows. –Нельзя вмешаться или настроить процесс аутентификации.
Реализация Windows Authentication Для использования Windows аутентификации в ASP.NET приложении и доступа к user identity в ASP.NET необходимо выполнить три шага для IIS 5 или IIS 6.0 или два шага для IIS 7.0: 1. Выбрать Windows authentication в IIS Manager. 2. Задать в web.config файле ASP.NET использование информации аутентификации IIS. 3. Запретить анонимный доступ к web страницам, подпапкам или всему web приложению.