تبلیغات
آموزشASP.NET - تایید و شناسایی کاربران بر اساس فرمهای وب در برنامه‎های ASP.NET
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 

برنامههای وب ASP.NET می توانند از سه روش مختلف برای شناسائی و تایید کاربران وب سایت استفاده کنند. این روش ها عبارتند از: Windows Authentication ، Forms-Based Authentication و Passport Authentication. آیا می دانید شناسایی کاربران در سایت Iranasp.net به کدام روش انجام می گیرد؟ یا اگر وارد سایت Iranasp.net شده ولی هنوز شناسایی نشده باشید و بخواهید به یک صفحه امن وارد شوید چه اتفاقی می افتد؟ این مقاله به این نوع سوالات پاسخ می دهد و شما را قدم به قدم با چگونگی شناسایی کاربران آشنا می کند


برنامه های وب ASP.NET می توانند از سه روش مختلف برای شناسائی و تایید کاربران وب سایت استفاده کنند. این روش ها عبارتند از: Windows Authentication ،Forms-Based Authentication و Passport Authentication. آیا می دانید شناسایی کاربران در سایت Iranasp.net به کدام روش انجام می گیرد؟ برای مثال اگر وارد سایت Iranasp.net شده ولی هنوز شناسایی نشده باشید و درخواست یک صفحه امن مانند http://www.iranasp.net/Members/postnews.aspx که مخصوص کاربران است را بکنید نمی توانید به این صفحه دسترسی داشته باشید. در این حالت شما به صفحه ای که حاوی فرم Login سایت است هدایت می شوید زیرا این سایت کاربران خود را به روش Forms-Based Authentication شناسایی می کند. در این مقاله مراحل لازم برای تایید و شناسایی کاربران یک وب سایت بر اساس فرمهای وب، یعنی Forms-Based Authentication قدم به قدم مورد بررسی قرار می گیرد.

این مقاله شامل بخشهای زیر می باشد:

ملزومات
ایجاد یک برنامه ASP.NET با استفاده از Visual Studio.NET (زبان: Visual Basic.NET)
پیکربندی تنظیمات امنیتی در فایل Web.config
ایجاد یک جدول در پایگاه داده برای ذخیره جزئیات و مشخصات کاربران
ایجاد یک فرم Logon.aspx که محل شناسایی کاربران می باشد
انجام کدنویسی برای برخی از رویدادها که بتوان کاربران را اعتبارسنجی کرد
ایجاد یک صفحه default.aspx
موارد دیگر
منابع


ملزومات

در ابتدا لازم است ملزومات زیر را بر روی سیستم خود آماده کنید:

• Microsoft Visual Studio .NET
• Microsoft SQL Server
• Microsoft Internet Information Server (IIS) version 5.0 or later


ایجاد یک برنامه ASP.NET با استفاده از Visual Studio.NET (زبان: Visual Basic.NET)

۱- Visual Studio .NET را باز کنید.
۲- یک برنامه وب ASP.NET را با زبان Visual Basic.NET ایجاد نمایید.


پیکربندی تنظیمات امنیتی در فایل Web.config

این قسمت نشان می دهد که چگونه قسمتهای <authentication> و <authorization> فایل Web.config را تنظیم کنیم تا برنامه ASP.NET ساخته شده در قسمت بالا برای تایید کاربران بر مبنای فرمها پیکربندی شود. برای این کار مراحل زیر را انجام دهید.

۱- فایل Web.config را از پنجره Project Explorer باز کنید.
۲- مد authentication را برابر "Forms" قرار دهید.
۳- تگ <Forms> را قرار دهید و خصوصیات مناسب آنرا تکمیل کنید (برای دیدن لیست کامل این خصوصیات می توانید به مستندات QuickStart مراجعه کنید). قسمت authentication در فایل Web.config باید به شکل زیر باشد. می توانید همین کد را کپی کرده و از منوی Edit در Visual Studio.NET گزینه Paste as HTML را انتخاب کنید.

<authentication mode="Forms">
    <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"
        protection="All" path="/" timeout="30" />
</authentication>


۴- حال باید با تغییر قسمت authorization به شکل زیر مانع از ورود افراد ناشناس به صفحات شوید:

<authorization>
    <deny users ="?" />
    <allow users = "*" />
</authorization>



ایجاد یک جدول در پایگاه داده برای ذخیره جزئیات و مشخصات کاربران

این مرحله چگونگی ایجاد یک جدول در پایگاه داده، برای ذخیره نام، کلمه عبور و نقش (وظیفه) کاربران را نشان می دهد.

۱- برنامه Notepad را باز کنید.
۲- کد اسکریپت SQL زیر را در آن کپی کنید:

if exists (select * from sysobjects where id =
object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Users]
GO
CREATE TABLE [dbo].[Users] (
    [uname] [varchar] (15) NOT NULL ,
    [Pwd] [varchar] (25) NOT NULL ,
    [userRole] [varchar] (25) NOT NULL ,
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Users] WITH NOCHECK ADD
    CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED
    (
         [uname]
    ) ON [PRIMARY]
GO

INSERT INTO Users values('user1','user1','Manager')
INSERT INTO Users values('user2','user2','Admin')
INSERT INTO Users values('user3','user3','User')
GO

INSERT INTO Users values('user1','user1','Manager')
INSERT INTO Users values('user2','user2','Admin')
INSERT INTO Users values('user3','user3','User')
GO


۳- فایل را با نام Users.sql ذخیره کنید.
۴- SQL Server را باز کنید. فایل Users.sql را در Query Analyzer باز کنید (برای دسترسی به محیط Query Analyzer می توانید آنرا از منوی Tools در SQL Server اجرا کنید). از لیست Databases پایگاه داده Pubs را انتخاب کنید و اسکریپت (فایل Users.sql) را اجرا کنید. این کار جدولی به نام Users را در پایگاه داده Pubs ایجاد می کند و داده های نمونه ای را در آن برای استفاده در برنامه ASP.NET قرار می دهد. می توانید به جای Pubs از پایگاه داده دیگری هم استفاده کنید که در این صورت، هنگام تعیین Connection String مربوط به آبجکت Connection باید نام آن پایگاه داده را به جای Pubs قرار دهید.


ایجاد یک فرم Logon.aspx که محل شناسایی کاربران می باشد

۱- یک فرم به نام Logon.aspx را به پروژه اضافه کنید.
۲- در نمای HTML فرم Logon.aspx کد زیر را بین دو تگ <Form> اضافه کنید:

<h3>
<font face="Verdana">Logon Page</font>
</h3>
<table>
    <tr>
        <td>UserName:</td>
        <td><input id="txtUserName" type="text" runat="server"></td>
        <td><ASP:RequiredFieldValidator ControlToValidate="txtUserName"
            Display="Static" ErrorMessage="*" runat="server"
            ID="vUserName" /></td>
    </tr>
    <tr>
        <td>Password:</td>
        <td><input id="txtUserPass" type="password" runat="server"></td>
        <td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass"
            Display="Static" ErrorMessage="*" runat="server"
            ID="vUserPass" />
        </td>
    </tr>
    <tr>
        <td>Persistent Cookie:</td>
        <td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td>
        <td></td>
    </tr>
</table>
<input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p>
<asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" />


در این فرم کاربرانی که می خواهند وارد سایت شوند شناسایی می شوند. این فایل را ذخیره کنید.


انجام کدنویسی برای برخی از رویدادها که بتوان کاربران را اعتبارسنجی کرد

این قسمت حاوی کدی است که در فایل code-behind فرم Logon.aspx ) یعنی( Logon.aspx.vb قرار می گیرد.

۱- فایل logon.aspx.vb را باز کنید.
۲- فضانام های مورد نیاز را در فایل code-behind وارد کنید:

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

۳- یک تابع به نام ValidateUser ایجاد کنید که مشخصات کاربران را برای اعتبارسنجی در پایگاه داده جستجو می کند. برای این کار می توانید از کد زیر استفاده کنید. (Connection String موجود در این کد باید مطابق با پایگاه داده شما باشد پس در صورت لزوم باید آنرا مطابق با سیستم خودتان تغییر دهید. در اینجا نام کامپیوتر من DOTNET می باشد و SQL Server به صورت Local نصب شده است).

Function ValidateUser(uid As string, passwd As string) As Boolean
    Dim cnn As SqlConnection
    Dim cmd As SqlCommand
    Dim dr As SqlDataReader
    Dim retVal As Boolean = False
    cnn = New SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Workstation                     ID=DOTNET;")
    cmd = New SqlCommand("Select * from users where uname = '" & uid & "'", cnn)
    cnn.Open()
    dr = cmd.ExecuteReader()
    While (dr.Read())
        If Strcomp(dr.Item("Pwd"), passwd, 1) = 0 Then
            retVal = True
        End If
    End While
    cnn.Close()
    ValidateUser = retVal
End Function


۴- شما می توانید از یکی از روشهای زیر برای ایجاد کوکی شناسایی بر اساس فرمها استفاده کرده و در رویداد cmdLogin_ServerClick کاربر را به صفحهی مناسب هدایت کنید. یکی از دو قطعه کد زیر را برای رویداد cmdLogin_ServerClick بنویسید:

-
متد RedirectFromLoginPage را برای ایجاد خودکار کوکی شناسایی فراخوانی کنید و کاربر را به صفحه ی مناسب هدایت کنید:

Private Sub cmdLogin_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles cmdLogin.ServerClick
    If ValidateUser(txtUserName.Value,txtUserPass.value) Then
        FormsAuthentication.RedirectFromLoginPage(txtUserName.Value, _
        chkPersistCookie.Checked)
    Else
        lblMsg.Text = "Unknown User! try again."
    End If
End Sub

- برچسب شناسایی (authentication ticket) را بسازید و آنرا رمزنگاری کنید. یک کوکی بسازید و آنرا به پاسخ درخواست انجام شده از صفحه اضافه کنید و کاربر را هدایت کنید. این روش امکانات زیادی را در رابطه با نحوه ساخت کوکی به شما می دهد. مثلا می توانید داده های دلخواه خود را به کوکی اضافه کنید:

Private Sub cmdLogin_ServerClick(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles cmdLogin.ServerClick
    If Validateuser(txtUserName.Value,txtUserPass.Value) Then
        Dim tkt As FormsAuthenticationTicket
        Dim cookiestr As String
        Dim ck As HttpCookie

        tkt = New FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now(), _
        dateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data")
        cookiestr = FormsAuthentication.Encrypt(tkt)
        ck = new HttpCookie(FormsAuthentication.FormsCookieName(), cookiestr)
        if (chkPersistCookie.Checked) then ck.Expires=tkt.Expiration
        ck.Path = FormsAuthentication.FormsCookiePath()
        Response.Cookies.Add(ck)

        Dim strRedirect As String
        strRedirect = Request("ReturnURL")
        If strRedirect <> "" Then
            Response.Redirect(strRedirect, True)
        Else
            strRedirect = "default.aspx"
            Response.Redirect(strRedirect, True)
        End If
    Else
        lblMsg.Text = "Unknown User! try again."
    End If
End Sub



ایجاد یک صفحه default.aspx

در این قسمت یک صفحه به نام default.aspx می سازیم. این صفحه برای کاربرانی است که شناسایی شده اند و قرار است که به این صفحه هدایت شوند. اگر کاربری بدون این که شناسایی شده باشد این صفحه را درخواست کند به صفحه logon.aspx هدایت می شود.

۱- یک فرم جدید به نام default.aspx به پروژه اضافه کرده و آنرا در نمای HTML باز کنید. کد زیر را در بین تگ های <Form> اضافه کنید:

<input type="submit" Value="SignOut" runat="server" id="cmdSignOut">

این دکمه برای خارج شدن (log out) از صفحه default.aspx استفاده می شود. با کلیک بر روی این دکمه کوکی ساخته شده از بین می رود. این فرم را ذخیره کنید.

۲- فضانام لازم را در فایل code-behind مربوط به فرم default.aspx وارد کنید:

Imports System.Web.Security

۳- کد زیر را برای رویداد cmdSignOut_ServerClick اضافه کنید:

Private Sub cmdSignOut_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles cmdSignOut.ServerClick
    FormsAuthentication.SignOut()
    Response.Redirect("logon.aspx", True)
End Sub

۴- اکنون می توانید از این برنامه استفاده کنید. همه فایلها را ذخیره کرده و برنامه را اجرا کنید.

تمام کد مربوط به برنامه همراه با اسکریپت لازم برای ایجاد جدول در پایگاه داده را می توانید از طریق همین صفحه دانلود کنید.


موارد دیگر

ممکن است شما بخواهید که کلمه های عبور کاربران را به صورت امن و رمزنگاری شده در پایگاه داده ذخیره کنید. در این صورت می توانید از تابعی به نام HashPasswordForStoringInConfigFile که یکی از توابع سودمند کلاس FormsAuthentication می باشد استفاده کنید. به کمک این تابع می توانید کلمه های عبور را قبل از ذخیره کردن در پایگاه داده رمزنگاری کنید.

ممکن است بخواهید اطلاعات مربوط به SQL Connection را در فایل پیکربندی (Web.config) ذخیره کنید تا راحتتر بتوانید آنرا تغییر دهید.

ممکن است بخواهید کدهایی را برای جلوگیری از ورود هکرهایی که قصد دارند از ترکیبات مختلف کلمه های عبور برای ورود به سایت استفاده کنند، در نظر بگیرید. برای مثال می توانید منطقی را پیاده سازی کنید که فقط تعداد مشخصی اقدام ورود به سایت را قبول می کند و اگر کاربری در تعداد معینی از انجام عمل ورود نتواند وارد سایت شود، در پایگاه داده با علامت زدن نام این کاربر، دیگر این کاربر غیر فعال شده و با وارد کردن مشخصات درست نیز نتواند وارد سایت شود مگر این که با بازدید از صفحه ای دیگر از سایت یا با تماس با واحد پشتیبانی شما بتواند حساب خود را دوباره فعال کند!

به دلیل این که کاربر با کوکی تایید اعتبار شناسایی می شود، ممکن است از Secure Socket Layer یا SSL در برنامه استفاده کنید تا کسی نتواند کوکی و سایر اطلاعات باارزشی که در حال انتقال هستند را بدست آورد.

تایید اعتبار بر مبنای فرمها نیازمند این است که کاربران سایت کوکی ها را در مرورگر خود فعال کنند.

پارامتر timeout در بخش پیکربندی <authentication> مدت زمانی که کوکی تایید اعتبار دوباره ایجاد می شود را تایین می کند، شما می توانید هر مقداری را که مناسب می دانید به این پارامتر اختصاص دهید.




درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :