Реализация аутентификации при помощи формы
Теперь давайте посмотрим на код ASP.NET, необходимый для использования аутентификации с помощью формы. Ниже приведены настроечные параметры для этого примера.
<authentication mode="Forms"> <forms name=".SiteCookie" loginUrl="logon.aspx" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true"> <credentials passwordFormat="Clear"> <user name="James" password="HisPassword" /> <user name="Tammy" password="HerPassword" /> </credentials> </forms> </authentication>
Следующий шаг состоит в создании страницы logon.aspx. Эта страница будет принимать имя пользователя и пароль, а затем сверять эти данные с информацией из настроечного файла. Ниже показана форма для получения имени пользователя и пароля.
<form runat="server"> Username: <asp:TextBox id="tbUserName" runat="server" /><br /> Password: <asp:TextBox id="tbPassword" runat="server" /> <br /> <asp:CheckBox id="cbPersist" text="Remember Me" runat="server" /> <asp:Button id="btnLogin" OnClick="btnLogin_OnClick" Text="Login" runat="server" /> <asp:Label id="lblResults" runat="server" /> </form>
Это простая форма ASP.NET, которая принимает имя пользователя и пароль и при нажатии на кнопку входа генерирует серверное событие. Ниже приведен код, использующийся для сравнения этих данных с именем пользователя и паролем, хранимыми в настроечном файле.
C#
<script language="C#" runat="server"> void btnLogin_OnClick(object sender, EventArgs e) { if(FormsAuthentication.Authenticate(tbUserName.Text, tbPassword.Text) { FormsAuthentication.RedirectFromLoginPage(tbUserName.Text, cbPersist.Checked); } else { lblResults.Text = "Invalid Username and Password"; } } </script>
VB.NET
<script language="vb" runat="server"> Sub btnLogin_OnClick(sender as object, e as EventArgs) If FormsAuthentication.Authenticate(tbUserName.Text, _ tbPassword.Text) Then FormsAuthentication.RedirectFromLoginPage(tbUserName.Text, _ cbPersist.Checked) Else lblResults.Text = " Invalid Username and Password" End If End Sub </script>
Давайте построчно разберем этот код.
If FormsAuthentication.Authenticate(tbUserName.Text, _tbPassword.Text) Then
Сначала выполняется проверка того, совпадают ли введенные имя пользователя и пароль с сохраненными именем пользователя и паролем. В нашем примере имена пользователей и пароли хранятся в настроечном файле, поэтому для сравнения данных используется метод FormsAuthentication.Authenticate(). В больших и более сложных приложениях имена пользователей и пароли необходимо сохранять в базе данных, в которой их можно быстро изменить. В этом случае следует создать метод поиска в базе совпадающей пары и возвращения значение true или false. Этот метод можно использовать вместо метода FormsAuthentication.Authenticate(), и наш пример будет прекрасно работать. Если метод FormsAuthentication.Authenticate() или ваш собственный возвращают значение true, выполняется следующая строка кода.
FormsAuthentication.RedirectFromLoginPage(tbUserName.Text, _cbPersist.Checked)
Она вызывает метод FormsAuthentication.RedirectFromLoginPage(), который возвращает пользователя к запрашиваемой странице (странице, с которой пользователь был перенаправлен на страницу регистрации, хранящейся в параметре строки запроса ReturnURL), а если такой страницы нет, то к странице default.aspx. Первый передаваемый параметр – имя пользователя, а второй – логическое значение, указывающее, следует ли сохранить cookie аутентификации. Если второе значение равно true, cookie сохраняется на неопределенный срок, в противном случае срок действия cookie истекает через время, установленное в настроечном файле. Если метод FormsAuthentication.Authenticate() или собственный метод аутентификации возвращают false, дайте пользователю знать, что он должен войти заново.
Else lblResults.Text = "Invalid Username and Password" End If
В этом коде задается текст надписи сообщения, которое говорит пользователю, что его имя и пароль не опознаны. Это все, что требуется от вашего веб-приложения для реализации аутентификации с помощью формы. Вот как эта аутентификация работает в вашем приложении.
- Когда пользователи пытаются получить доступ к защищенной части приложения, они перенаправляются на страницу logon.aspx.
- Пользователь входит на страницу logon.aspx и создается cookie аутентификации.
- В зависимости от того, установлен ли флажок cbPersist или нет, этот cookie либо сохраняется, либо его время действия истекает через заданное количество минут.
- Пользователь возвращается на страницу, к которой он первоначально пытался получить доступ.