كيفية تنفيذ مصادقة مستندة إلى النماذج في تطبيق ASP.NET الخاص بك باستخدام Visual Basic.NET

ملخص

توضح هذه المقالة كيفية تنفيذ مصادقة مستندة إلى النماذج باستخدام قاعدة بيانات لتخزين المستخدمين.

متطلبات

توضح القائمة التالية الأجهزة الموصى بها برامج البنية الأساسية للشبكة وحزم الخدمات التي تحتاجها:
  • Microsoft Visual Studio.NET
  • Microsoft SQL Server
  • Microsoft معلومات خدمات الإنترنت الإصدار 5.0 أو أحدث

إنشاء تطبيق ASP.NET باستخدام Visual Basic.NET

  1. فتح Visual Studio.NET.
  2. إنشاء تطبيق ويب ASP.NET جديد، ثم حدد اسم وموقع.

تكوين إعدادات الأمان في ملف Web.config

يوضح هذا القسم كيفية إضافة وتعديل < المصادقة > و < الترخيص > مقاطع التكوين لتكوين تطبيق ASP.NET لاستخدام المصادقة المستندة إلى النماذج.
  1. في "مستكشف الحلول"، افتح ملف Web.config.
  2. تغيير وضع المصادقة على النماذج.
  3. قم بإدراج علامة < النماذج >، وتعبئة السمات المناسبة. (لمزيد من المعلومات حول السمات، تشير إلى وثائق MSDN أو وثائق التشغيل السريع المسردة في
    قسم المراجع .) نسخ التعليمات البرمجية التالية ومن ثم انقر فوق لصق ك HTML في القائمة تحرير للصق التعليمات البرمجية في مقطع < المصادقة > ملف:
    <authentication mode="Forms"><forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
    protection="All" path="/" timeout="30" />
    </authentication>

  4. رفض الوصول إلى المستخدم المجهول في قسم < الترخيص > كما يلي:
    <authorization><deny users ="?" />
    <allow users = "*" />
    </authorization>

إنشاء جدول قاعدة بيانات نموذج لتخزين التفاصيل المستخدمين

يوضح هذا القسم كيفية إنشاء نموذج قاعدة بيانات لتخزين اسم المستخدم وكلمة المرور، ودور للمستخدمين. تحتاج العمود دور إذا كنت تريد تخزين أدوار المستخدمين في قاعدة البيانات وتطبيق الأمان المستند إلى الدور.
  1. من القائمة ابدأ ، ثم انقر فوق تشغيل، واكتب "المفكرة" لفتح المفكرة.
  2. تمييز التعليمات البرمجية في البرنامج النصي 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

  3. حفظ الملف باسم Users.sql.
  4. على كمبيوتر Microsoft SQL Server، افتح Users.sql في "محلل استعلام". من القائمة قاعدة بيانات، انقر فوق ، وتشغيل البرنامج النصي. يؤدي هذا إلى إنشاء نموذج جدول مستخدمين وملء الجدول في قاعدة بيانات Pubs لاستخدامه مع هذا التطبيق.

إنشاء صفحة Logon.aspx

  1. إضافة "نموذج ويب" جديد إلى المشروع باسم Logon.aspx.
  2. افتح صفحة Logon.aspx في المحرر، وقم بالتبديل إلى طريقة عرض HTML.
  3. نسخ التعليمات البرمجية التالية، واستخدم الخيار لصق ك HTML القائمة تحرير لإدراج التعليمات البرمجية بين علامات < form >:
    <h3>   <font face="Verdana">Logon Page</font>
    </h3>
    <table>
    <tr>
    <td>Email:</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" />

    يستخدم هذا "النموذج ويب" تقديم نموذج تسجيل دخول للمستخدمين بحيث يمكنهم توفير اسم المستخدم وكلمة المرور لتسجيل الدخول إلى التطبيق.
  4. قم بالتبديل إلى طريقة عرض التصميم، ثم حفظ الصفحة.

التعليمات البرمجية معالج الحدث حيث أن التحقق من صحة بيانات اعتماد المستخدم

يقدم هذا المقطع التعليمات البرمجية التي يتم وضعها في صفحة التعليمات البرمجية الخلفية (Logon.aspx.vb).
  1. فتح ملف Logon.aspx.vb.
  2. استيراد مساحات الأسماء المطلوبة في ملف التعليمات البرمجية الخلفية:
    Imports System.Data.SqlClientImports System.Web.Security

  3. إنشاء دالة ValidateUser للتحقق من صحة بيانات اعتماد المستخدم عن طريق البحث في قاعدة البيانات. (تأكد من تغيير سلسلة الاتصال للإشارة إلى قاعدة البيانات.)
    Private Function ValidateUser(ByVal userName As String, ByVal passWord As String) As Boolean        Dim conn As SqlConnection
    Dim cmd As SqlCommand
    Dim lookupPassword As String

    lookupPassword = Nothing

    ' Check for an invalid userName.
    ' userName must not be set to nothing and must be between one and 15 characters.
    If ((userName Is Nothing)) Then
    System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of userName failed.")
    Return False
    End If
    If ((userName.Length = 0) Or (userName.Length > 15)) Then
    System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of userName failed.")
    Return False
    End If

    ' Check for invalid passWord.
    ' passWord must not be set to nothing and must be between one and 25 characters.
    If (passWord Is Nothing) Then
    System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of passWord failed.")
    Return False
    End If
    If ((passWord.Length = 0) Or (passWord.Length > 25)) Then
    System.Diagnostics.Trace.WriteLine("[ValidateUser] Input validation of passWord failed.")
    Return False
    End If

    Try
    ' Consult with your SQL Server administrator for an appropriate connection
    ' string to use to connect to your local SQL Server.
    conn = New SqlConnection("server=localhost;Integrated Security=SSPI;database=pubs")
    conn.Open()

    ' Create SqlCommand to select pwd field from the users table given a supplied userName.
    cmd = New SqlCommand("Select pwd from users where uname=@userName", conn)
    cmd.Parameters.Add("@userName", SqlDbType.VarChar, 25)
    cmd.Parameters("@userName").Value = userName


    ' Execute command and fetch pwd field into lookupPassword string.
    lookupPassword = cmd.ExecuteScalar()

    ' Cleanup command and connection objects.
    cmd.Dispose()
    conn.Dispose()
    Catch ex As Exception
    ' Add error handling here for debugging.
    ' This error message should not be sent back to the caller.
    System.Diagnostics.Trace.WriteLine("[ValidateUser] Exception " & ex.Message)
    End Try

    ' If no password found, return false.
    If (lookupPassword Is Nothing) Then
    ' You could write failed login attempts here to the event log for additional security.
    Return False
    End If

    ' Compare lookupPassword and input passWord by using a case-sensitive comparison.
    Return (String.Compare(lookupPassword, passWord, False) = 0)

    End Function

  4. يمكنك استخدام إحدى الطريقتين التاليتين لإنشاء ملف تعريف ارتباط مصادقة النماذج وإعادة توجيه المستخدم إلى صفحة مناسبة في الحدث cmdLogin_ServerClick . يتم توفير نموذج التعليمات البرمجية لكل من السيناريوهات. استخدام أي منهما وفقا للشرط الخاص بك.
    • استدعاء الأسلوب ريديريكتفروملوجينباجي لإنشاء ملف تعريف ارتباط مصادقة النماذج وإعادة توجيه المستخدم إلى صفحة مناسبة في الحدث cmdLogin_ServerClick :
      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
      Response.Redirect("logon.aspx", True)
      End If
      End Sub

    • إنشاء تذكرة المصادقة وتشفيرها وإنشاء ملف تعريف ارتباط، إضافة إلى الاستجابة وإعادة توجيه المستخدم. هذا يوفر لك المزيد من التحكم في كيفية إنشاء ملف تعريف الارتباط. يمكنك أيضا تضمين بيانات مخصصة مع فورمسوثينتيكاتيونتيكيت في هذه الحالة.
      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
      Response.Redirect("logon.aspx", True)
      End If
      End Sub

إنشاء صفحة Default.aspx

ينشئ هذا المقطع صفحة اختبار الذي يتم توجيه المستخدمين بعد المصادقة. استعراض المستخدمين إلى هذه الصفحة دون تسجيل الدخول الأولى إلى التطبيق، يتم توجيههم إلى صفحة تسجيل الدخول.
  1. إعادة تسمية الصفحة WebForm1.aspx الموجودة باسم Default.aspx وفتحه في المحرر.
  2. قم بالتبديل إلى طريقة عرض HTML، ونسخ التعليمة البرمجية التالية بين علامات < form >:
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    يستخدم هذا الزر لتسجيل الخروج من جلسة مصادقة النماذج.
  3. قم بالتبديل إلى طريقة عرض التصميم، ثم حفظ الصفحة.
  4. استيراد مساحات الأسماء المطلوبة في ملف التعليمات البرمجية الخلفية:
    Imports System.Web.Security
  5. فتح صفحة تعليمات برمجية في الخلف (الافتراضي)، ثم نسخ التعليمة البرمجية التالية في معالج الحدث 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

  6. حفظ والتحويل البرمجي للمشروع. يمكنك الآن استخدام التطبيق.

استكشاف الأخطاء وإصلاحها

  • قد تحتاج إلى تخزين كلمات المرور بشكل أمن في قاعدة بيانات. يمكنك استخدام الدالة المساعدة فئة FormsAuthentication يدعى هاشباسووردفورستورينجينكونفيجفيلي لتشفير كلمات المرور قبل أن تقوم بتخزينها في ملف التكوين أو قاعدة البيانات.
  • قد تحتاج إلى تخزين معلومات اتصال SQL في ملف التكوين (Web.config) حيث يمكن بسهولة تعديلها إذا لزم الأمر.
  • قد ترغب في إضافة التعليمات البرمجية لمنع المتطفلين الذين يحاولون استخدام تركيبات مختلفة من كلمات المرور من تسجيل الدخول. على سبيل المثال، يمكنك تضمين منطق التي تقبل اثنين أو ثلاث محاولات تسجيل الدخول. لا يمكن للمستخدم تسجيل الدخول في عدد معين من المحاولات، قد تحتاج إلى تعيين إشارة في قاعدة البيانات لعدم السماح بذلك المستخدم بتسجيل الدخول إلى هذا المستخدم إعادة يمكن حسابه بالانتقال إلى صفحة مختلفة أو بالاتصال بخط الدعم الخاص بك. وبالإضافة إلى ذلك، يجب إضافة معالجة الأخطاء المناسب حيثما كان ذلك ضروريا.
  • لأنه يتم تعريف المستخدم استناداً إلى ملف تعريف ارتباط المصادقة، قد تحتاج إلى استخدام طبقة مأخذ التوصيل الآمنة (SSL) على هذا التطبيق حيث أن أحداً استرداد ملف تعريف ارتباط المصادقة وقيمة المعلومات الأخرى التي يتم نقلها.
  • تتطلب مصادقة النماذج-أن قبول العميل أو تمكين ملفات تعريف الارتباط على المستعرض الخاص بهم.
  • معلمة المهلة لمقطع التكوين < المصادقة > التحكم في الفاصل الزمني الذي يتم إعادة إنشاء ملف تعريف ارتباط المصادقة. يمكنك اختيار قيمة يوفر أفضل من الأداء والأمان.
  • بعض وكلاء وسيط وذاكرات التخزين المؤقت على شبكة الإنترنت قد تخزين استجابات ملقم ويب التي تحتوي على رؤوس تعيين Cookie ثم عاد إلى مستخدم آخر. نظراً لاستخدام المصادقة المستندة إلى نماذج ملف تعريف ارتباط لمصادقة المستخدمين، يمكن أن يسبب هذا المستخدمين بطريق الخطأ (أو عن قصد) انتحال صفة مستخدم آخر قبل تلقي ملف تعريف ارتباط من وسيط الوكيل أو ذاكرة التخزين المؤقت لا تقصده الأصل الخاصة بها.

المراجع

لمزيد من المعلومات حول تنفيذ مصادقة مستندة إلى نماذج بسيطة باستخدام المقطع < بيانات اعتماد > تخزين المستخدمين وكلمات المرور، راجع المقالة التالية في نماذج ASP.NET التشغيل السريع:
المصادقة المستندة إلى النماذج
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx
لمزيد من المعلومات حول تنفيذ مصادقة مستندة إلى النماذج باستخدام ملف لغة توصيف الموسعة (XML) لتخزين المستخدمين وكلمات المرور، راجع الموضوع التالي في وثائق.NET Framework برامج تطوير مجموعة (SDK):
مصادقة النماذج باستخدام ملف XML المستخدمين
http://msdn2.microsoft.com/en-us/library/1b1y85bh(vs.71).aspx
لمزيد من المعلومات حول أمان تطبيق ويب ASP.NET، راجع المقالة التالية في وثائق.NET Framework SDK:لمزيد من المعلومات حول مساحة الاسم System.Web.Security ، راجع المقالة التالية في وثائق.NET Framework SDK:لمزيد من المعلومات حول تكوين ASP.NET، راجع المقالات التالية الموجودة في.NET Framework SDK:لمزيد من المعلومات حول إرشادات الأمان في ASP.NET، راجع المستند التقني MSDN التالي:
المصادقة في ASP.NET: دليل أمان.NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx
لمزيد من المعلومات، راجع الكتب التالية:
إسبوزيتو، دينو. إنشاء حلول ويب باستخدام ASP.NET و ADO.NET. Microsoft Press، 2001.

هوارد ومايكل وديفيد لوبلان. كتابة التعليمات البرمجية الآمنة. Microsoft Press، 2001.
خصائص

رقم الموضوع: 308157 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition

تعليقات