|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
16. Безопасность приложений ASP.NET 2.0Защита приложений ASP.NET 2.0, аутентификация и управление разрешениями, аутентификация Windows и аутентификация средствами Web-форм Вначале - о некоторых концепциях системы безопасности ASP.NET. Аутентификация - процеcc получения имени пользователя и пароля и проверка полученной информации (через AD, базу данных и т.п.). Если проверка прошла успешно, то пользователь относится к категории аутентифицировавшихся пользователей. Авторизация - процесс определения того, какие права предоставлены пользователю на указанный ресурс. В итоге пользователю предоставляется доступ к указанному ресурсу или такой доступ запрещается. В ASP.NET поддерживается три метода аутентификации: · аутентификация Windows; · аутентификация средствами Web-форм; · аутентификация средствами Microsoft Passport. При использовании аутентификации Windows при обращении пользователя к Web-странице Web-сервер запрашивает у него имя пользователя (с доменом) и парольный хэш. Полученная информация проверяется средствами Windows (на локальном компьютере или через контроллер домена). При использовании аутентификации средствами Web-форм пользователю предоставляется форма, на которой он должен ввести свое имя и пароль. Полученная информация проверяется не средствами Windows, а средствами Web-приложения. Если все нормально, на компьютер пользователя передается специальная authentification cookie, которая в дальнейшем и удостоверяет права пользователя на доступ к страницам этого Web-приложения. Работать через Microsoft Passport могут только доверенные партнеры Microsoft. при использовании этого метода аутентификацией занимается Web-служба Microsoft Passport. В каких ситуациях каждый режим аутентификации используется: · Windows - как правило, только для Интранет-приложений, поскольку каждому пользователю нужно создавать учетную запись Windows. · Web-формы - для большинства приложений, которые предназначены для доступа через Интернет; · Microsoft Passport - требует платы и соглашения с Microsoft, поэтому большого смысла в использовании нет. Удобно, поскольку пользователь может использовать одно имя пользователя и один пароль для доступа ко многим Web-сайтам - меньше риск забыть. При использовании аутентификации Windows вам потребуется настроить аутентификацию на уровне IIS. В IIS предусмотрено четыре режима аутентификации: · Anonymous - пользователю не требуется предоставлять имя пользователя и пароль. Реально этот пользователь будет обладать на Web-сервере правами специальной учетной записи IUSR_имя_компьютера (можно поменять на другую учетную запись из консоли Internet Services Manager); · Basic - имя пользователя и пароль учетной записи Windows будут передаваться на сервер практически открытым текстом. (base64 - encoded). Поддерживаются все броузеры, но такой режим небезопасен (лучше использовать только вместе с SSL). · Digest - вместо пароля передается хэш в формате MD5. Метод защищенный и основанный на открытых стандартах, однако работает только с доменными учетными записями и только с теми. для которых установлено хранение пароля в режиме reversible encryption, поэтому малоприменимо. Работает с только с Internet Explorer версии 5.0 или более поздних. · Integrated Windows - передается хэш Windows. Работает только с Internet Explorer. Наиболее часто используется для Интранет-приложений. Возможность зашифровать весь обмен информацией между клиентом и Web-сервером - применение SSL. В ASP.NET предусмотрена возможность проверить, установлено защищенное соединение или нет. Для этой цели используется проверка значения свойства Request.IsSecureConnection. Теперь - о применении аутентификации Windows в Web-приложениях. Защита Web-приложения ASP.NET средствами аутентификации Windows состоит из нескольких этапов: 1) установить необходимые параметры в IIS (как - мы уже рассматривали); 2) настроить аутентификацию в Web.config; 3) настроить авторизацию в web.config. Второй пункт реализуется так: нужно открыть нужный файл web.config и вписать в раздел system.web следующую строку: <system.web> <authentication mode="Windows" /> </system.web> Дальше нужно настроить авторизацию, то есть указать, для какого файла или каталога кому будет открыт доступ. Для этой цели используется тег location: <location path="ShoppingCart.aspx"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location> Если в атрибуте path будет указан каталог, то настройки распространятся на все файлы в этом каталоге и подкаталогах. Если будет указан конкретный файл (Web-форма), то настройки будут распространены только на эту Web-форму. <deny users="?" /> означает, что запрещен доступ всем анонимным пользователям. Чтобы разрешить доступ пользователю Mary, код может быть таким: <authorization> <allow users="Mary" /> </authorization> Если включить этот код в файл web.config для всего приложения, то параметры будут применены для всего Web-приложения. В ASP.NET можно использовать имперсонацию. При применении имперсонации обращение к ресурсам идет с правами той учетной записи, которая прошла аутентификацию. По умолчанию имперсонация отключена, и обращение к ресурсам происходит от имени учетной записи ASPNET. Чтобы имперсонацию включить, можно использовать код вида <identity impersonate="true|false" username="username" password="password" /> После настройки аутентификации Windows в Web-приложении при обращении к защищенной Web-странице пользователю откроется стандартное окно аутентификации, в котором пользователю необходимо ввести имя и пароль. В коде Web-приложения вы можете получать информацию об аутентификации пользователя при помощи объекта User.Identity, например: lblAuthUser.Text = User.Identity.Name lblAuthType.Text = User.Identity.AuthenticationType lblIsAuth.Text = User.Identity.IsAuthenticated Теперь - про Forms-based аутентификацию. При использовании этой аутентификации запрос пользователя все равно должен пройти через IIS (и, таким образом, отработать аутентификация Windows). Поэтому на уровне аутентификации Windows должен быть открыт доступ для анонимных пользователей. Далее работа выглядит так: 1) пользователь запрашивает доступ к защищенной Web-странице 2) сервер проверяет, включен ли в этот запрос authentification cookie. Если да, то происходит авторизация. При этом сравнивается имя пользователя, которое включено в куки, с параметрами авторизации в web.config и на основании этого принимается решение - пускать пользователя или нет. 3) если authentification cookie не встроен в запрос, ASP.NET перенаправляет пользователя на logon page (путь к нему определяется в файле конфигурации приложения). на этой странице пользователь должен ввести имя и пароль. 4) код приложения на logon page проверяет введенное пользователем имя и пароль, и, если оно правильно, прицепляет к его сеансу authentification cookie, и далее все идет согласно п.2. Если нет - выдается сообщение типа Access Denied. Как все это реализовать на практике: Вначале обеспечиваем для Web-приложения анонимную аутентификацию средствами Windows (такой режим работает по умолчанию) Затем прописываем в файл web.config для приложения следующий код: <system.web> <authentication mode="Forms"> <forms name=".namesuffix" loginUrl="login.aspx" /> </authentication> </system.web> То, что содержится в теге forms, относится к настройкам куки. Атрибут name - это суффикс куки, а loginURL - путь к странице аутентификации, на которую будут перенаправляться все неаутентифицировавшиеся запросы. Далее настраивается секция авторизации в web.config (точно так же, как при аутентификации Windows). Далее создается Web-страница logon.aspx. Это - очень простая страница, обычно с двумя полями: имя пользователя и пароль. Некоторые проблемы может вызвать только написание для нее codebehind кода. Об этом - ниже. На codebehind странице для logon page можно использовать полностью свою логику проверки и поведения, а можно воспользоваться заранее готовым кодом ASP.NET, который реализован средствами объекта FormsAuthentification. Для него предусмотрены следующие методы: · Authentificate - этот метод принимает имя пользователя и пароль и проверяет его по указанному вами хранилищу имен и паролей; · GetAuthCookie - создает authentification cookie для указанного имени пользователя. При этом куки автоматически не выдается пользователю в рамках ответа сервера - об этом нужно позаботиться отдельно; · GetRedirectUrl - возвращает URL, к которому обратился неаутентифицировавшийся пользователь, прежде чем он был перенаправлен на logon page. · RedirectFromLoginPage - перенаправляет пользователя на тот самый URL, к которому он обращался изначально. · SetAuthCookie - то же, что и GetAuthCookie, но при этом куки автоматически выдается пользователю в рамках ответа сервера. Редирект на нужную страницу при этом не происходит. · SignOut - удаляет auth cookie с пользователя (когда пользователь производит операцию sign out). Код самой logon page может быть очень простым, например: <form id="Login" method="post" runat="server"> <P>Email: <asp:TextBox id="txtEmail" runat="server"> </asp:TextBox></P> <P>Password<asp:TextBox id="txtPassword" TextMode="password" runat="server"> </asp:TextBox></P> <P><asp:Button id="cmdLogin" Text="Sign In Now" OnClick="cmdLogin_Click" runat="server"> </asp:Button></P> <P><asp:Label id="lblInfo" runat="server"> </asp:Label></P> </form> Далее мы настраиваем код обработчика событий для единственной кнопки на этой форме: Private Sub cmdLogin_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cmdLogin.Click Dim strCustomerId As String ’Validate User Credentials strCustomerId = Login(txtEmail.Text, txtPassword.Text) If (strCustomerId <> "") Then FormsAuthentication.RedirectFromLoginPage _ (strCustomerId, False) Else lblInfo.Text = "Invalid Credentials: Please try again" End If End Sub Всю проверку выполняет у нас внешняя функция login, которая, если все прошло нормально, возвращает имя пользователя (непустое значение). Необходимо помнить, что при использовании Forms-based аутентификации информация об имени пользователя и пароле передается открытым текстом. Поэтому рекомендуется сочетать такую аутентификацию с защитой средствами SSL. Последняя часть нашего курса - использование аутентификации средствами Microsoft Passport. Наиболее удобная возможность при использовании Microsoft Passport - то, что пользователь может помнить только одно имя пользователя/пароль для доступа на множество Web-сайтов. При использовании аутентификации средствами Microsoft Passport ASP.NET проверяет наличие специального куки. Если его нет, пользователь перенаправляется на сайт passport.com за аутентификацией. Passport.com выполняет аутентификацию и если она прошла успешно, на клиента прописывается authentification cookie, а клиент перенаправляется туда, откуда он пришел на passport.com. Далее, как обычно, вступают в действие настройки авторизации. Дополнительная информация - www.passport.com и msdn.microsoft.com.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||