تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Membership Authentication & Roles Authorization الجزء الاول
#1
كاتب الموضوع عمر المستشار


Membership Authentication & Roles Authorization
أولا خلونا نتفق على بعض المسطلحات عشان نكون كلنا في إتجاه واحد. عملية تخزين المستخدمين بكلمات مرورهم في الـ ASP.NET تسمى بالـ Membership، بينما عملية تسجيل دخول المستخدم والتأكد من كلمة المرور تسمى بالـ Authentication. أما عملية تقسيم المستخديمن إلى مجموعات (مثلا المشرفين، المدراء، المراقبين .... إلخ) تسمى بالـ Roles، عملية السماح أو عدم السماح لمستخدم معين بالوصول إلى مصدر معين بناء على الـ Roles الذي ينتمي إليه أو إليهم تسمى بالـ Authorization. الشخص الذي لا يمتلك اسم مستخدم يسمى بالـ Anonymous User.

أولا : ما هي أنواع الـ Authentication في الـ ASP.NET :

عندما تقوم بإنشاء مشروع جديد عن طريق VS 2005/2008 وتقوم بتحديد المشروع على أنه ASP.NET website لاحظ أنه سيتم إضافة ملف خاص بإسم web.config، بداخله ستلاحظ العبارة أو الإدخال التالي :



كود :
<system.wbe>




<authentication mode="Windows" />
كود :
[align=right][b]</system.web>[/b]
[/align]

هذا هو الإدخال الذي من خلالة تقوم بتحديد طريقة أو نوع الـ Authentication لمشروعك وكما نرى في حالتنا هذه أنه بشكل إفتراضي يكون Windows. والمقصود هنا اسم المستخدم الذي دخلت به في نظام MS Windows (أي أن عملية تسجيل الدخول والتحقق من كلمة المرور ستكون عن طريق نظام تشغيل Windows الموجود في الجهاز الحالي الذي عن طريقة ستقوم بتصفح هذه الصفحة أو الموقع). فلو قمنا بتغيير هذا النوع سنلاحظ أن VS 2005/2008 سيقوم بإقتراح Windows, Forms, Passport, None. حيث أن Windows سبق شرحه أعلاه، و Passport لم أستخدمها قط ولكن مما قرأت يقال أن هناك ما يسمى بالـ Microsoft's Passport Service وهي ستكون مسؤولة عن التحقق من اسم المستخدم وكلمة المرور، أما None فهي كلمة معبرة عن نفسها ولاتحتاج إلى شرح، وأخيرا وليس آخرا Forms وهذا ما سوف نتطرق إليه بعد قليل.

ملاحظة : عملية التحقق من إسم المستخدم وكلمة المرور تسمى بالـ Authentication Formalities.

Forms Authentication :
من منا لم يستخدم الـ Forms Authentication ، عندما تقوم بتسجيل الدخول في هذا المنتدى أو في تسجيل الدخول لبريدك الإلكتروني أو لحسابك البتكي والأمثلة كثيرة. بكل بساطة الـ Forms Authentication عبارة عن القيام بـ Authentication Formalities عن طريق HTML Form بحيث (في أبسط صورة) يوجد هناك حقلين أحدهما لإسم المستخدم والثاني لكلمة المرور.


ثانيا : تطبيق Forms Authentication على مشروعك

يمكنك فعل ذلك بعدة ضغطات بالفأرة عن طريق إستخدام ASP.NET Website Administration Tool (AWAT), plain & simple. هنا لن نتطرق لهذه الطريقة ولكن سنقوم بتحديد ما يترتب على ذلك فقط. عندما تقوم بإستخدام AWAT ستلاحظ أن هناك خطوات أو Wizard من خلالها ستتمكن من تجهيز موقعك، وتشمل هذه الخطوات تحديد نوع الـ Authentication وكم طول كلمة المرور، وهل البريد الإلكتروني يتكرر أم لا، وهل فرض إستخدام السؤال السري وما هو وما هي الإجابات المحتملة و و و و. بعد أن تنتهي من تحديد ما سبق وبعد أن تقوم بإدخال بعض المستخدمين والـ Roles عن طريق AWAT ستلاحظ أن هناك مجلد App_Data تم إضافة في مشروعك وبداخله ملف aspnetdb.mdf، قم بفتح الملف ستلاحظ أن AWAT قد قام ببناء قاعدة بينات كاملة ومتكاملة وصدقني أنه يمكنك الإعتماد عليها جدا حيث أنه ستلاحظ أن كلمات المرور وبعض البيانات المهمة قد تم تشفيرها داخل جداول قاعدة البيانات aspnetdb.mdf. بعد ذلك قم بإستخدام الأدوات الجاهزة والخاصة بالـ Authentication مثل LoginControl ومل إلى ذلك.

سؤال : ماذا لو كانت عندك قاعدة بينات ولنفرض أنها MS SQL - حيث لا تكون هناك مشكلة في التوافق - وأنت تريد إضافة الجداول الموجودة في aspnetdb.mdf إلى قاعدة بياناتك بدل من أن يتم إضافتها في ملف خارجي ؟
طبعا قد يسأل شخص وما الضرر في أن تكون الجداول المتعلقة بالـ Authentication مفصولة، ستكون الإجابة هي كالتالي : في كل مرة مشروعك يحتاج إلى أداء أي شيء متعلق بالـ Authentication سيقوم بالإتصال بملف الـ aspnetdb.mdf، وفي كل مرة يحتاج أن يقوم بأي شيء يتعلق بالـ business الذي يقوم به سوف يتصل بقاعدة البيانات التي بها الجداول المتعلقة بالـ business الذي بسببة تم إنشاء هذا المشروع، فهناك قاعدتي بيانات فقد يرغب الشخص بتغيير السؤال إلى : لماذا لا يكون هناك مركزية لقاعدة البيانات. عموما بناء الجداول المتعلقة بالـ Authentication داخل قاعدة بينات موجودة مسبقا بسيط جدا كل ما تحتاج إليه هو فقط إستخدام ASP.NET SQL Server Registration Tool عن طريق الذهاب إلى المجلد الذي تم تثبيت الـ dot Net Framework وكتابة الأمر aspnet_regsql بإستخدام الـ command-line كما هو موضح أدناه


كود :
%WINDOWS%\Microsoft.NET\Framework\<your .net framework version>\aspnet_regsql
بعد ذلك سيظهر لك wizard قم بإتباعها إلى النهاية وسيتم بناء الجداول داخل قاعدة البيانات التي تم تحديدها بإستخدام الـ wizard.

سؤال : ماذا لو كان هناك جداول خاصة بك أو بمشروعك تحوي على معلومات الـ Authentication وتريد إستخدامها بدل من الجداول التي سيتم بنائها عن طريق AWAT أو aspnet_regsql، ماذا لو كانت الجداول الناتجة عن كل من AWAT و aspnet_regsql أكثر من اللازم لمشروعك أو أنك فقط تريد تطبيق نظام Authentication بسيط جدا ؟ ماذا لو كانت قاعدة البيانات الموجودة Oracle أو MySql أو شيء غير MSSQL، بمعنى آخر ماذا لو ان الأداة aspnet_regsql لا تفيدك ؟


ثالثا : A simple Authentication System
هنا سنقوم ببناء نظام الـ Authentication الخاص بناء وسوف نحاول أن نجعله بسيط جدا، سنقوم ببناء بعض الجداول المتعلقة بموضوعنا هذا إبتداء بجدول المستخدمين وإنتهاء بالجدول الخاص بالـ Roles، فكل خطوة سنقوم بها سأقوم بكتابة تركيب الجدول الذي نحتاجة.

المستخدمين users_tbl: سنقوم ببناء جدول المستخدمين (users_tbl) كما هو موضح أدناه :


كود :
create table users_tbl (
        uid int primary key identity(1,1),
        uname varchar(50),
        password varchar(10),
        email varchar(50)
كود :
[align=right][b])[/b][/align]


إضافة الإعدادات اللازمة في ملف web.config :
المقصود هنا تحديد نوع الـ Authentication وعنوان الصفحة التي سيتم توجيه الـ anonymous user إليها في حالة تطلب تسجيل الدخول للوصول لمصدر معين (سنرى هذه العملية لاحقا) وأيضا الصفحة الإفتراضية التي سيتم توجيه المستخدم إليها بعد أن تتم عملية الـ Authentication Formalities، بشكل إفتراضي ستكون صفحة تسجيل الدخول هي login.aspx ولكن يمكنك تغيير ذلك، قم بإضافة التالي في ملف web.config :


كود :
system.web>
كود :
.
.
.
<authentication mode="Forms">
       <forms loginUrl="~/login.aspx" defaultUrl="~/Default.aspx" />
     </authentication>
.
.
.
كود :
[align=right][b]</system.web>[/b][/align]

بناء class يساعدنا في عملية Authentication Formatlities وتسجيل المستخدمين "Utilities.cs" :

قم بإضافة مجلد خاص عن طريق الضغط بالزر اليمين على الـمشروع ومن ثم Add ASP.NET Folder ومن ثم App_Code وبعد ذلك قم بإضافة class بإسم Utilities.cs داخل App_Code وبعد ذلك قم بكتابة التالي :


كود :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;

/// <summary>
/// Summary description for Utilities
/// </summary>
public static class Utilities
{
   // Make sure to change the connectionString to your relating MDF file
   private const string connectionString =
       @"data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|mydb.mdf;User Instance=true";

   // Note: Exceptions are not handled in any of the following codes, try to handle them the way
   //      you see fit

   public static void RegisterNewUser(string username, string password, string email)
   {
       using (SqlConnection con = new SqlConnection(connectionString))
       {
           SqlCommand cmd = new SqlCommand(@"insert into users_tbl(uname, password, email)
               values(@uname, @password, @email)", con);

           // Note: do not use OledbParameters.AddWithValue with complex data type (image, blob, date, binary ... etc)
           cmd.Parameters.AddWithValue("uname", username);
           cmd.Parameters.AddWithValue("password", password);
           cmd.Parameters.AddWithValue("email", email);

           con.Open();
           cmd.ExecuteNonQuery();
       }
   }
}

يتبع ان شاء الله تعالى
الرد }}}}
#2
للاستفادة ان شاء الله تعالى

http://iqdotnet.wordpress.com/2011/07/29/71/

والمثال وقاعدة البيانات في المرفقات


الملفات المرفقة
.rar   member1.rar (الحجم : 393.21 ك ب / التحميلات : 28)
الرد }}}}


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الجزء الثانى - إستدعاء دالة Server-Side من خلال Client-Side RaggiTech 0 619 15-10-12, 11:18 AM
آخر رد: RaggiTech
  الجزء الأول- إستدعاء دالة Server-Side بإستخدام Client-Side RaggiTech 0 619 15-10-12, 11:16 AM
آخر رد: RaggiTech
  مقدمة تعريفية بـ ASP.Net- الجزء السادس - Page Class RaggiTech 0 468 15-10-12, 10:43 AM
آخر رد: RaggiTech
  مقدمة تعريفية بـ ASP.Net - الجزء الخامس--ِASP.Net Compilation RaggiTech 0 597 15-10-12, 10:41 AM
آخر رد: RaggiTech
  مقدمة تعريفيه بـ ASP.Net - الجزء الرابع-- Global.asax-Modules-Handlers RaggiTech 0 422 15-10-12, 10:39 AM
آخر رد: RaggiTech
  مقدمة تعريفيه بـ ASP.Net - الجزء الثالث-HttpContext -HttpApplication RaggiTech 0 458 15-10-12, 10:36 AM
آخر رد: RaggiTech
  مقدمة تعريفيه بـ ASP.Net - الجزء الثانى - ASP.Net Patterns RaggiTech 0 415 15-10-12, 10:34 AM
آخر رد: RaggiTech
  مقدمة تعريفية بـ ASP.Net - الجزء الأول RaggiTech 0 409 15-10-12, 10:30 AM
آخر رد: RaggiTech
  عمل Web Service خاصة بك من خلال .net - الجزء الثاني RaggiTech 0 758 14-10-12, 03:14 PM
آخر رد: RaggiTech
  استخدام WebService خاصة بك في مشروعاتك الفعلية - الجزء الثالث RaggiTech 0 524 14-10-12, 03:13 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم