Главная страница статей --> Хитрости при программировании php, заметки по базам данных

Средства безопасности ASP.NET. Аутентификация

Источник: realcoding.net

[2 страница]
В результате выполнения этого кода на вашем SQL Server должна создаться база данных с именем “FormAuthUsers”, в которой вы сможете найти таблицу Users с тремя записями и хранимую процедуру FindUser. Эта процедура возвращает количество пользователей, удовлетворяющих запросу, который формируется из параметров, передаваемых этой процедуре.

Теперь, когда у нас готова база данных, мы можем приступить к созданию страницы, которая будет с ней работать. Для этого вновь возьмите за основу предыдущие примеры и замените обработчик события нажатия кнопки на странице login.aspx:
login.aspx.vb:

Imports System.Data.SqlClient
Imports System
.Web.Security

Public
Class WebForm1
Inherits System
.Web.UI.Page

Protected WithEvents txtName
As System.Web.UI.WebControls.TextBox
Protected WithEvents txtPassword
As System.Web.UI.WebControls.TextBox
Protected WithEvents lbl
As System.Web.UI.WebControls.Label
Protected WithEvents btnLogin
As System.Web.UI.WebControls.Button

#Region “ Web Form Designer Generated Code “

‘This call is required by the Web Form Designer.
<
System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

‘NOTE
: The following placeholder declaration is required by the Web Form Designer.
‘Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init
(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
‘CODEGEN
: This method call is required by the Web Form Designer
‘Do not modify it using the code editor
.
InitializeComponent()
End Sub

#End Region

Private Sub btnLogin_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLogin.Click
Dim cn
As New SqlConnection(“server=localhost;database=FormAuthUsers;uid=sa;pwd=;)
Dim cm As New SqlCommand(“FindUser”, cn)
Dim n As Integer

Открываем соединение
Try
cn.Open()
Catch ex As SqlException
Response.Write(ex.Message)
Exit Sub
End Try

Задаём тип команды
cm
.CommandType = CommandType.StoredProcedure

Добавляем параметры имени
Dim prmName = New SqlParameter(“@Name”, SqlDbType.NvarChar, 50)
prmName.Value = txtName.Text
cm.Parameters.Add(prmName)
Добавляем параметр пароля
Dim prmPass
= New SqlParameter(@Password”, SqlDbType.NvarChar, 50)
prmPass.Value = txtPassword.Text
cm
.Parameters.Add(prmPass)

Выполняем запрос
n = cm.ExecuteScalar

If n > 0 Then
Если кого-то нашли, значит, регистрация пройдена успешно
FormsAuthentication
.RedirectFromLoginPage(txtName.Text, False)
Else
если никого нет, значит, ошибка
lbl.Visible = True
End If

cn.Close()
End Sub
End Class

Для корректной работы этой страницы убедитесь, что строка подключения подходит под вашу конфигурацию. Давайте разберёмся в том, что тут происходит. Во-первых, создаётся объект соединения SqlConnection, в качестве параметра которому передаётся строка подключения к базе данных:

Dim cn As New SqlConnection(“server=localhost;database=FormAuthUsers;uid=sa;pwd=;)

После этого создаётся экземпляр объекта SqlCommand, который служит для выполнения команд работы с данными. Следующие строки кода открывают соединение, но при этом учитывается возможность исключений, которые вылавливаются обработчиком исключений try:

Открываем соединение
Try
cn.Open()
Catch ex As SqlException
Response.Write(ex.Message)
Exit Sub
End Try

Если при открытии соединения возникают какие-либо сбои, то пользователь получает соответствующее сообщение, и операция прерывается.

После этого объект SqlCommand настраивается на выполнение хранимой процедуры, и подготавливаются параметры для её запуска. Для этих 7 строк кода, конечно же, существует альтернатива, состоящие из 1 строки кода:

cm.CommandText = exec FindUser & txtName.Text & , & txtPassword.Text &

Но, не смотря на то, что этот код короче, время работы будет больше. Почему? Дело в том, что с этой строкой вы осуществляете оперативный запрос, т. е. Вы пишите непосредственно SQL-команду, которая вызывает хранимую процедуру. В результате вы передаёте по сети дополнительные данные в виде команды “exec”, которая в свою очередь занимает место в сетевом трафике; как только этот запрос достигнет сервера, то сначала выполнится команда “exec”, и лишь потом запустится нужная нам хранимая процедура FindUser. Кроме этого существует ещё более тяжёлый способ, который заключается в отказе от хранимых процедур и вставке всего необходимого кода запроса непосредственно в объект SqlCommand, в результате чего ещё больше дополнительной информации отправляется по сетевому трафику. Казалось бы, что это такой плюс-минус пара десятков байт, но, а если вам придётся работать с огромными запросами, код которых значительно больше, чем у нашей процедуры? Поэтому самым лучшим способом является использование хранимых процедур, поскольку в этом случае вы получаете чёткое разделение обязанностей, при котором клиентская страница отвечает только за ввод-вывод данных в доступной пользователю форме; SQL Server выполняет все операции с данными; а IIS выступает в роли посредника между клиентом и сервером – вот вам и трёхуровневая архитектура. Не загружайте “нежные” клиентские машины лишней работой – лучше доверьте её тяжёлой артиллерии, т. е. серверу.

Но вернёмся к нашему коду и продолжим его разбор: после определения типа команды и подготовки всех параметров мы благополучно выполняем эту команду, при чём, обратите внимание, что для выполнения используется функция ExecuteScalar. Её следует применять, когда в качестве результата вы получаете скалярную величину, т. е. число, что собственно и происходит в нашей процедуре FindUser – она возвращает количество записей, удовлетворяющих заданному условию:

SELECT COUNT(ID) FROM Users
WHERE UserName
= @Name AND Password = @Password

В конце кода, получив количество найденных записей, мы просто анализируем это значение и выполняем соответствующие операции.
Аутентификация формой с использованием Web-служб:

Предположим, вы работаете в организации XYZ. Вам было поручено создать приложение, управляющее информацией о персонале вашей организации. Вы работаете над этим проектом уже 7 месяцев, и вдруг по соображениям безопасности вам было поручено разместить информацию о пользователях на совсем другом сервере, с которым активно работает другой отдел организации XYZ. Непосредственный доступ к серверу вам не обеспечили, поэтому ваш проект не может напрямую обращаться к базе данных с пользователями, расположенной на этом сервере. Для решения этой проблемы было решено дать вам возможность разработать Web-службу, через которую вы могли бы осуществлять контроль над аутентификацией пользователей.

Эта выдуманная история раскрывает ещё один способ, позволяющий проводить аутентификацию – использование Web-служб. Web-службы становятся особенно актуальными, когда у вас или у ваших клиентов нет полноценного доступа к серверу. Кроме того, Web-службы применимы не только к Web-приложениям, но они могут также быть использованы и программными продуктами, работающими на самых разнообразных платформах. Это стало возможно благодаря применению технологии SOAP (Simple Object Access Protocol), которая использует стандартные порты TCP/IP и протокол HTTP.

Для работы с Web-службой её, прежде всего, нужно создать. Для этого начните новый проект типа ASP.NET Web Service (рис. 4).


Рис. 4 – Создание Web-службы

Теперь, используя код обработчика события нажатия кнопки регистрации из предыдущего примера, вставьте его в исходный код Web-службы, немного видоизменив до следующей формы:
AuthSrvc.asmx:

Imports System.Web.Services
Imports System
.Data.SqlClient

<System.Web.Services.WebService(Namespace := http://tempuri.org/AuthSrvc/Service1)> _
Public
Class Service1
Inherits System
.Web.Services.WebService

#Region Web Services Designer Generated Code

Public Sub New()
MyBase.New()

This call is required by the Web Services Designer.
InitializeComponent()

Add your own initialization code after the InitializeComponent() call

End Sub

Required by the Web Services Designer
Private components As System.ComponentModel.IContainer

NOTE: The following procedure is required by the Web Services Designer
It can be modified using the Web Services Designer.
Do not modify it using the code editor.
<
System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
End Sub

Protected Overloads Overrides Sub Dispose
(ByVal disposing As Boolean)
CODEGEN: This procedure is required by the Web Services Designer
Do not modify it using the code editor.
If
disposing Then
If Not (components Is Nothing) Then
components
.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

#End Region

Функция, осуществляющая проверку наличия пользователя с заданным именем и паролем
<WebMethod()> Public Function Authenticate(ByVal UserName As String, ByVal Password As String,
        ByRef ErrMessage As String) As Boolean
Dim cn As New SqlConnection(server=localhost;database=FormAuthUsers;uid=sa;pwd=;)
Dim cm As New SqlCommand(FindUser, cn)
Dim n As Integer

Открываем соединение
Try
cn
.Open()
Catch ex As SqlException
Если есть исключение, то передаём его описание параметру ErrMessage
ErrMessage = ex.Message
Exit Function
End Try

Задаём тип команды
cm
.CommandType = CommandType.StoredProcedure

Добавляем параметры имени
Dim prmName = New SqlParameter(@Name, SqlDbType.NVarChar, 50)
prmName.Value = UserName
cm.Parameters.Add(prmName)
Добавляем параметр пароля
Dim prmPass
= New SqlParameter(@Password, SqlDbType.NVarChar, 50)
prmPass.Value = Password
cm
.Parameters.Add(prmPass)

Выполняем запрос
n = cm.ExecuteScalar
Закрываем соединение
cn
.Close()

Анализируем полученный результат
If n > 0 Then
Если кого-то нашли, значит, регистрация пройдена успешно
Return True
Else
если никого нет, значит, ошибка
Return False
End If
End Function
End Class

Вы можете проверить работоспособность службы, не отходя от кассы, для этого просто запустите её на выполнение в среде Visual Studio .NET. Если в службе не было ошибок, то увидите перед собой экран, на котором будут 2 гиперссылки. Одна из них ведёт к описанию Web-службы средствами языка WSDL (Web Service Description Language), а другая (Authenticate) позволяет протестировать службу. Нажмите на вторую гиперссылку и заполните таблицу параметров, в появившейся странице (рис. 5). Если вы введёте в поле UserName строку “John”, а в качестве пароля подставите “one”, то функция вернёт значение True:

http://localhost/AuthSrvc/AuthSrvc.asmx/Authenticate:
<?xml version=1.0 encoding=utf-8 ?>
<boolean xmlns=http://tempuri.org/AuthSrvc/Service1>true</boolean>

Если изменить значение любого из этих полей на недействительное, т. е. на то, которого нет в базе данных, то результат соответственно будет противоположным – False.

Думаю, нет смысла детально разбирать код этой функции, потому что во многом она похожа на свою предшественницу из предыдущего примера. Но, тем не менее, следует обратить особое внимание на обработчик исключений. Если в листинге с базой данных он при возникновении каких-либо исключений просто выводил соответствующее сообщение на экран, то в Web-службе мы передаём сообщение об ошибке параметру ErrMessage функции Authenticate, который был объявлен по ссылке:.

Открываем соединение
Try
cn.Open()
Catch ex As SqlException
Если есть исключение, то передаём его описание параметру ErrMessage
ErrMessage
= ex.Message
Exit Function
End Try

В приложениях, которые будут использовать эту службу, мы встроим проверку на наличие каких-либо исключений, и при их обнаружении будем выводить соответствующее сообщение.


Рис. 5 – Проверка работоспособности Web-службы

Теперь давайте создадим приложение, которое будет использовать эту Web-службу, но только на этот раз мы немного отойдём от темы и для разнообразия создадим приложение Windows:

1. Создайте новый проект типа Windows Application
2. Измените форму так, чтобы она была похожа на форму, изображённую на рис. 6, или можете просто подставить код в конструктор из следующего листинга.
3. В окне SolutionExplorer щёлкните правой кнопкой мыши по папке References и выберите в появившемся контекстном меню команду Add Web Reference…
4. Перед вами появится диалог установки ссылок к Web-сервисам. Введите в поле URL полный адрес к файлу .asmx и запустите поиск. В результате вы должны увидеть нечто подобное рисунку 7.
5. Нажмите на кнопку Add Reference, и в вашем проекте появится ссылка на указанную Web-службу.
6.


Рис. 6 – Примерный вид тестового приложения


Рис. 7 – Результаты поиска Web-службы

Теперь можно приступить к написанию программного кода, реализующего этот Web-сервис. Весь необходимый код приведён ниже:
AuthSrvcRelease.vb:

Public Class Form1
Inherits System
.Windows.Forms.Form

#Region Windows Form Designer generated code

Public Sub New()
MyBase.New()

This call is required by the Windows Form Designer.
InitializeComponent()

Add any initialization after the InitializeComponent() call

End Sub

Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

Required by the Windows Form Designer
Private components
As System.ComponentModel.IContainer

NOTE: The following procedure is required by the Windows Form Designer
It can be modified using the Windows Form Designer.
Do not modify it using the code editor.
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents txtName As System.Windows.Forms.TextBox
Friend WithEvents txtPassword As System.Windows.Forms.TextBox
Friend WithEvents cmdExit As System.Windows.Forms.Button
Friend WithEvents cmdLogin As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Label1 = New System.Windows.Forms.Label
Me.Label2 = New System.Windows.Forms.Label
Me.txtName = New System.Windows.Forms.TextBox
Me.txtPassword = New System.Windows.Forms.TextBox
Me.cmdExit = New System.Windows.Forms.Button
Me.cmdLogin = New System.Windows.Forms.Button
Me.SuspendLayout()

Label1

Me.Label1.Location = New System.Drawing.Point(8, 8)
Me.Label1.Name = Label1
Me.Label1.Size = New System.Drawing.Size(40, 16)
Me.Label1.TabIndex = 0
Me
.Label1.Text = Name:

Label2

Me.Label2.Location = New System.Drawing.Point(8, 40)
Me.Label2.Name = Label2
Me.Label2.Size = New System.Drawing.Size(64, 16)
Me.Label2.TabIndex = 1
Me.Label2.Text = Password:

txtName

Me.txtName.Location = New System.Drawing.Point(80, 5)
Me.txtName.Name = txtName
Me.txtName.Size = New System.Drawing.Size(216, 20)
Me.txtName.TabIndex = 2
Me
.txtName.Text =

txtPassword

Me.txtPassword.Location = New System.Drawing.Point(80, 37)
Me.txtPassword.Name = txtPassword
Me.txtPassword.PasswordChar = Microsoft.VisualBasic.ChrW(42)
Me.txtPassword.Size = New System.Drawing.Size(216, 20)
Me.txtPassword.TabIndex = 3
Me.txtPassword.Text =

cmdExit

Me.cmdExit.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me
.cmdExit.Location = New System.Drawing.Point(216, 72)
Me.cmdExit.Name = cmdExit
Me.cmdExit.Size = New System.Drawing.Size(80, 24)
Me.cmdExit.TabIndex = 4
Me
.cmdExit.Text = Exit

cmdLogin

Me.cmdLogin.Location = New System.Drawing.Point(128, 72)
Me.cmdLogin.Name = cmdLogin
Me.cmdLogin.Size = New System.Drawing.Size(80, 24)
Me.cmdLogin.TabIndex = 5
Me.cmdLogin.Text = Login

Form1

Me.AcceptButton = Me.cmdLogin
Me
.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.CancelButton = Me.cmdExit
Me
.ClientSize = New System.Drawing.Size(304, 103)
Me.Controls.Add(Me.cmdLogin)
Me.Controls.Add(Me.cmdExit)
Me.Controls.Add(Me.txtPassword)
Me.Controls.Add(Me.txtName)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Label1)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me
.MaximizeBox = False
Me
.MinimizeBox = False
Me
.Name = Form1
Me.Text = AuthSrvc Test application
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub cmdLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLogin.Click
Устанавливаем ссылку на объект
Dim au As New localhost.Service1
Dim sErr As String, bln As Boolean

Осуществляем проверку
Cursor
= Cursors.WaitCursor
bln
= au.Authenticate(txtName.Text, txtPassword.Text, sErr)
Cursor = Cursors.Default
- Но сперва учтём возможные исключения
If sErr <> Then
MsgBox(sErr)
Exit Sub
End If
- А теперь переходим к основной проверке
If bln = True Then
MsgBox
(Hello & txtName.Text, MsgBoxStyle.Information)
Else
MsgBox(Wrong data!, MsgBoxStyle.Exclamation)
End If
End Sub

Private Sub cmdExit_Click
(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExit.Click
End
End Sub
End
Class

В этом примере можно увидеть очень простой код, который заключается в обычном вызове функции, которая выполняет все необходимые операции.

Как уже было ранее сказано, Web-службы основаны на технологии SOAP и потому могут быть использованы приложениями, работающими совсем на другой платформе. Мы не будем уходить далеко, отрекаясь от Windows, но попробуем вызвать эту же самую Web-службу без применения технологий .NET, т. е. непосредственно через SOAP. Для этого создайте следующий файл сценария на языке Visual Basic Script Edition (VBScript) и запустите его на выполнение:
SOAP.vbs:

Создаём экземпляр объекта SoapClient
Set sc = CreateObject(MSSOAP.SoapClient)
Соединяемся с веб-службой и вызываем метод Authenticate
sc
.mssoapinit http://localhost/AuthSrvc/AuthSrvc.asmx?WSDL
If sc.Authenticate (John, one, s) = True Then
    MsgBox
Hello John, 64
Else
   
MsgBox Wrong data!!, 48
End
If

Удаляем ссылку на объект
Set sc = Nothing

Как видите, применяя объектную модель SOAP, вы можете обращаться к Web-службам, используя самые разнообразные языки программирования (даже скрипты!) и платформы.

Но не всё так идеально, как кажется. Под красивой обёрткой Web-сервисов скрываются подводные камни, в первую очередь – это их собственная безопасность. Web-службы имеют беззащитную XML-структуру, перехватив которую, можно легко понять и получить передаваемые данные. Чтобы исключить, а точнее уменьшить вероятность подобной утечки информации, необходимо обезопасить веб-службы. Для этих целей существует ряд технологий, но наиболее распространённые только три из них: правила Firewall’а, Secure Sockets Layer (SSL) и Virtual Private Network (VPN).

Если вы точно знаете, какие компьютеры будут обращаться к вашему Web-сервису, то в этом случае вам подойдёт вариант с применением правил Firewall’а, где вы можете задать ограничения и права для конкретных IP-адресов, поэтому данный метод больше применим для локальных сетей, где вам не приходится особо беспокоиться о конфиденциальности передаваемых сведений. Очень удобным средством для этого является Microsoft Security and Acceleration (ISA) Server. Он предлагает расширенные правила политики, позволяющие ограничить или, наоборот, открыть доступ к информации для конкретных клиентов.

SSL наибольшим образом подходит для сетей Internet. При его использовании данные шифруются и передаются между сервером и клиентом; поступившие данные после этого проходят аутентификацию, проверяя тем самым, от того ли источника пришли эти данные. Это происходит с применением сертификатов, которые должны находиться как у сервера, так и у клиента, поэтому с одной стороны использование сертификатов позволяет удостовериться, что данные попадают в нужные руки, но с другой стороны – нужно быть уверенным, что у получателя есть соответствующий сертификат. Таким образом, для применения SSL вам нужно:

1. Получить сертификаты: сертификаты бывают коммерческие и триальные. Разница между ними заключается в том, что коммерческий будет официально оформлен на покупателя и, соответственно, будет стоить денег, а триальный можно получить бесплатно, но при этом без официального оформления. Сертификат можно получить по следующему адресу: http://www.verisign.com/. Но какой бы тип сертификата вы не заказывали, загрузить вам всё равно нужно будет 2: один для сервера, а другой – для клиентов (его ещё называют Certificate Authority (CA)).
2. Настроить сервер и установить сертификаты на клиентских броузерах: далее для успешного прохождения аутентификации запросов SSL необходимо добавить сертификаты, как на сервере, так и на клиентских машинах. Более того, клиентские сертификаты предназначены не для компьютера, а для броузера, т. е., если пользователь использует и Internet Explorer, и Netscape, желательно выдать ему сертификаты для обоих обозревателей. Впрочем, и серверные сертификаты тоже предназначены для разных типов серверов (На Verisign вы сможете найти сертификаты для более чем 50 видов серверов), но всё отличие в том, что их, как правило, не меняют, разве только новую версию устанавливают.

ПРИМЕЧАНИЕ

Но, не смотря на отсутствие официальной регистрации, триальный сертификат является легальным.

VPN – это расширение локальной сети, основанное на применении глобальной, в частности, Internet’а. Например, пользователь, работающий на удалённой машине, может соединиться с локальной сетью по средствам VPN, используя при этом Internet. С помощью этой технологии вы можете отправлять данные между компьютерами через защищённое соединение, поскольку VPN обладает теми же средствами безопасности, что и локальная сеть. Одним из недостатков VPN необходимость в долговременном соединении для эффективной работы. Для обмена данными VPN работает со следующими протоколами: Microsoft Point-to-Point Tunneling Protocol (PPTP), поставляемый с Windows NT 4.0 и Windows 2000, или Layer Two Tunneling Protocol (L2TP), доступный в Windows 2000.
ПРИМЕЧАНИЕ

В списке соответствующих операционных систем приведены лишь те, начиная с версий которых, данные протоколы стали доступными, т. е. в число этих ОС должны войти и более поздние версии, например, Windows XP, Windows 2003 Server.

Web-службы и средства их безопасности – это очень интересные и актуальные темы, учитывая то, что рост популярности Web-сервисов пошёл резко вверх с появлением .NET Framework и VS.NET. Но мы не станем дальше углубляться в подробности, а вернёмся в русло этой статьи. Вы можете с лёгкостью сами освоить все эти технологии. Для этого вам нужно лишь немного желания, терпения и свободного времени. Я могу вам дать только путеводительные метки, которые смогут вас направить по нужному курсу:

* http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/default.asp
* http://www.microsoft.com/isaserver
* http://support.microsoft.com/default.aspx?scid=kb;EN-US;q307267
* http://www.w3.org/TR/wsdl.html
* http://www.w3.org/TR/SOAP/

Аутентификация паспортом:


Паспорт – это единая система регистрации, созданная Microsoft, им можно воспользоваться на любом Web-сайте, являющемся членом этой акции. Одним важным плюсом данной технологии является то, что пользователю не нужно помнить регистрационные данные для каждого сайта в отдельности, что часто случается, когда привычный для вас аккуант уже занят на определённом web-узле. Паспорт позволяет решить эту проблему благодаря тому, что он использует общую базу о пользователях, поэтому на сайтах, поддерживающих .NET паспорт вы будете вводить всегда одни и те же регистрационные данные: ваш e-mail и пароль.

Метод аутентификации на основе паспорта использует стандартные технологии Web для удобства использования и сохранения конфиденциальности:

* защищённый протокол SSL
* cookie-файлы
* JavaScript 1.2
* шифрование методом 3DES

Для того чтобы реализовать всю мощь возможностей паспорта, вам нужно выполнить следующие действия:

1. Загрузите .NET passport SDK по следующему адресу:http://msdn.microsoft.com/library/default.asp?url=/downloads/list/websrvpass.asp

2. После этого вам следует зарегистрировать свой сайт в службе .NET паспорта: http://go.microsoft.com/fwlink/?LinkID=9732. Если вы не выполните регистрацию, то ваши возможности будут крайне ограничены, и вы не сможете в полной мере получить ожидаемый результат, например, для выхода из системы (т. е. logout) вам придётся закрыть все окна броузера и после этого удалить все cookie-файлы с паспортными данными

Также как и при использовании других типов аутентификации, сначала нужно настроить файл конфигурации проекта. Следующий листинг демонстрирует базовое содержание раздела authentication файла настройки:

<authentication mode=Passport>
    <
passport redirectUrl=login.aspx />
</
authentication>

В этом коде мы задаём тип аутентификации паспортом, после чего задаём один единственный параметр, настраивающий аутентификацию паспортом – адрес страницы, на которую будет переадресован пользователь, при возникновении необходимости пройти регистрацию: <passport redirectUrl="login.aspx" />

Ещё одна черта, объединяющая все виды аутентификации, - это интерфейс IIdendity, на основе которого были созданы все классы сведений о пользователе для различных видов аутентификации. Аутентификация паспортом тоже не является исключением из этого списка, и средством, реализующим все основные свойства, стал объект System.Web.Security.PassportIdentity инфраструктуры .NET Framework.

Для обозначения ссылки к регистрационной странице принято использовать специализированный логотип, подгружаемый через Интернет. Из-за того, что этот логотип обычно приходится использовать довольно часто, лучше всего создать отдельный элемент управления, реализующий компонент аутентификации. Для этого выполните следующие действия:

1. Cоздайте в VS.NET новый проект типа ASP.NET Web Application
2. Добавьте в него пользовательский элемент управления Web User Control и задаёте ему имя passport.ascx
3. Замените его исходный код на следующий:

passport.ascx.vb:

Imports System.Web.Security

Public
Class passport
Inherits System
.Web.UI.UserControl

#Region Web Form Designer Generated Code

This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

NOTE: The following placeholder declaration is required by the Web Form Designer.
Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
CODEGEN: This method call is required by the Web Form Designer
Do not modify it using the code editor.
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim id As PassportIdentity

Получаем данные о текущем пользователе
id
= CType(context.User.Identity, PassportIdentity)
Отображаем кнопку регистрации
Response.Write(id.LogoTag())
End Sub
End Class

1. После этого измените имя страницы Web-проекта на login.aspx и введите следующий код структуры страницы:

login.aspx:

<%@ Page Language=vb AutoEventWireup=false Codebehind=login.aspx.vb Inherits=PassAuth.WebForm1%>
<%@ Register TagName=passport TagPrefix=ctl src=passport.ascx%>
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN>
<html>
    <head>
        <title>LogIn</title>
        <meta name=GENERATOR content=Microsoft Visual Studio .NET 7.1>
        <meta name=CODE_LANGUAGE content=Visual Basic .NET 7.1>
        <meta name=vs_defaultClientScript content=JavaScript>
        <meta name=vs_targetSchema content=http://schemas.microsoft.com/intellisense/ie5>
    </head>
    <body MS_POSITIONING=GridLayout>
        <form id=Form1 method=post runat=server>
            <ctl:passport id=pas runat=server></ctl:passport>
        </form>
    </body>
</html>

Все основные действия по аутентификации пользователя берёт на себя объект PassportIdentity, а точнее служба Microsoft Passport, на которую .NET Framework выходит с помощью объекта PassportIdentity. Именно поэтому, вам остаётся только пожинать плоды, но для того, чтобы знать, что конкретно можно и нужно пожинать, обратитесь к таблице 1, в которой разъясняются все возможные атрибуты, описывающие зарегистрировавшегося пользователя.



Похожие статьи:
- Создаем статистику для сайта своими руками на ASP.NET
- Почему веб-зеваки ничего не стоят
- Всплывающее меню для одностраничного портала
- Сложные графики и диаграммы в ASP.NET. Часть третья - HttpHandler/System.Drawing
- Категориальное упорядочение результатов запроса
- Средства безопасности ASP.NET. Аутентификация
- XML+MSSQL+ASP.NET. Часть 1.
- Концептуальный подход к дизайну сайта
- Разница между HttpModule и HttpHandler
- Очищаем HTML от лишних знаков
- Обзор DetailsView
- Лекция 6. Работа с базами данных.
- Лекция 2. Анатомия ASP.NET. ASP.NET в действии.


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.002]