استخدام مصادقة ASP.NET في تطبيقات سطح المكتب

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

ولكن ماذا عن مبرمجي تطبيقات سطح المكتب ؟! ألا يوجد لديهم نظام لإدارة الصلاحيات
والمستخدمين لتوفير الوقت عليهم ؟.

في هذا المقال سأعرض كيف يمكن الاستفادة من نظام إدارة صلاحيات المواقع في تطبيقات
سطح المكتب.

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

الجزء الثاني من العملية هو وجود نظام لإدارة حالة المستخدم أثناء تسجيل دخوله والأمور
المرتبطة بها في الموقع وذلك مثلا بإنشاء جلسة ( Session ) خاصة بهذا العضو.

وهذا يوصلنا بأن هذا النظام الخاص بالمصادقة هو مجموعة من الدوال لإجراء عمليات في
قاعدة البيانات، وهو الغرض الرئيسي منه وبالتالي بغض النظر عن الأجزاء الثانية والثالثة
منه يمكننا الاستفادة من الجزء الأول الخاص بالتعامل مع قاعدة البيانات.

إذا وصلت هذه الفكرة إلى عقلك، يكون قد ذهب الجزء الأكبر من المشقة وهنا سأطرح الجزء
العملي للقيام بهذه الخطوة.

الخطوة الأولى تكمن في تكوين قاعدة البيانات لمصادقة الويب وهذا باستخدام أداة
aspnet_regsql
والتي يمكنك استدعاءها من موجه أوامر الفيجوال ستوديو أو من هذا
المسار
C:\Windows\Microsoft.NET\Framework\v2.0.50727
واختيار قاعدة البيانات المعنية لكي يتم تجهيز الجداول والدوال وباقي ما يتعلق بالمصادقة.

الخطوة الثانية تكون بإنشاء تطبيق جديد ليتم تجربة الأمر عليه ويتم إضافة المرجع
System.Web من خلال الضغط بالزر اليمين للماوس على اسم التطبيق واختيار Add Reference


visual studio add new item

visual studio add Reference
وبهذه الخطوة تكون قد أضفت المكتبة أو المرجع المسؤول عن الوصول للقاعدة بنظام مصادقة
الويب من اتصال ودوال .

لتوفير العناء من استيراد فضاء الأسماء في كل شيفرة كالتالي:
Improts System.Web.Secutity

أفضل استيراد فضاء الأسماء في كل المشروع وذلك من خلال خصائص المشروع.

الآن لنراجع الخطوات:
لدينا قاعدة بها جداول ودوال جاهزة، ولدينا مشروع مستعد للاتصال بهذه القاعدة وجلب
البيانات منها والإضافة إليها.

ولكن كما في برمجة الويب ينقصنا تحديد اسم القاعدة وباقي مواصفات جملة الاتصال حتى
يستطيع المشروع الاتصال بالقاعدة الصحيحة، فمن أين للمشروع معرفة أن القاعدة التي أنشأنا
بها الجداول للتو هي القاعدة التي سنتعامل معها وليس مع غيرها.

أيضا يلزمنا تحديد بعض الخيارات كتمكين الصلاحيات أو تعطيلها وأيضا يلزمنا تحديد
باقي خيارات المصادقة مثل كيفية حفظ كلمة المرور، وأقل طول لكلمة المرور … الخ.

وكالمعتاد يجب الذهاب لملف إعدادات المشروع وحيث كان في برمجة الويب اسمه web.config
هنا اسمه app.config.

قم بإضافة هذه الوسوم آخر ملف الإعدادات وإن لم يكن موجود بشكل افتراضي ملف الإعدادات
قم بإضافة ملف جديد عبر إضافة عنصر جديد واختيار Application Configuration File
واترك مسماه الافتراضي app.config .

الوسوم هي:

<system.web>   <membership>
    <providers>
      <remove name="AspNetSqlMembershipProvider"/>
      <add name="DevelopersSqlMembershipProvider"
          type="System.Web.Security.SqlMembershipProvider,System.Web,
           Version=2.0.0.0,
Culture=neutral,

           PublicKeyToken=b03f5f7f11d50a3a"
           connectionStringName="ConnStr"
           enablePasswordRetrieval="false"
           enablePasswordReset="false"
           requiresQuestionAndAnswer="false"
           applicationName="/"
           requiresUniqueEmail="false"
           passwordFormat="Hashed"
           maxInvalidPasswordAttempts="3"
           minRequiredPasswordLength="4"
           minRequiredNonalphanumericCharacters="0"
           passwordAttemptWindow="10"
           passwordStrengthRegularExpression=""
/>

    </providers>
  </membership>
</system.web>

مع العلم أن المواصفة connectionStringName يجب أن تأخذ اسم الجملة من الوسم
الموجود في المشروع، وأنا أفضل أن تكون موجودة ضمن وسوم إعداد التطبيق وليس من وسوم
إعداد الويب، وقد قمت بوضع صورة من مشروع معد مسبقا لتوضح المقصود من كلامي.

visual studio web.config

الآن كل شيء جاهز واعتبر نفسك مبرمج ويب وابدأ بعملك المعتاد دون تردد.

كبداية العمل نحتاج لإنشاء بعض المستخدمين وبعض الصلاحيات وذلك عبر

إنشاء مستخدمين :

Membership.CreateUser( UserName,Password)

Membership.CreateUser( "Khalil","Khalil")

أو أن ترسل أي عدد من الوسيطات للدالة كإرسال كافة الوسيطات

Dim status As MembershipCreateStatus
Membership.CreateUser( "Khalil","Khalil")

Membership.CreateUser("[email protected]","Password","Email","Password
question","Password answer", True ,status)

والفئة MembershipCreateStatus تشير إلى نجاح أو فشل محاولة إنشاء مستخدم
جديد ويمكن كتابة قيمة status لعرض المشكلة سواء كان الخلل في كلمة المرور أو البريد
أو حتى لو كان خطأ عام .

والآن حان وقت إنشاء الصلاحيات وكما أسلفت فالأمر هو نفسه الدارج في بيئة تطوير المواقع،
وذلك عبر استخدام الفئة
Roles.

ولإنشاء صلاحية عليك باستدعاء الدالة CreateRole أما تعيين
مستخدم لهذه الصلاحية فسيكون من خلال استدعاء الدالة
AddUserToRole
بهذا الشكل:

Roles.CreateRole("Developer")
Roles.AddUserToRole("Khalil", "Developer")

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

If Roles.IsUserInRole("Khalil", "Developer") Then
   MessageBox.Show ("Is a developer.")
Else
   MessageBox.Show ("Is not a developer.")
End If

visual studio

يمكن التحقق من المستخدم عبر

If Membership.ValidateUser("Khalil", "Khalil") Then
    MessageBox.Show("User validated.")

Else
    MessageBox.Show("User invalid!")
End If

visual studio

الحديث هنا يطول ولا ينتهي في كل جزئية من الصلاحيات والغرض من المقال فقط توضيح
استخدام المصادقة في تطبيقات سطح المكتب باعتبار أنك مطور مواقع لا بأس به.


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

أكون قد استعرضت كيفية إنشاء مستخدمين وصلاحيات وتعيين صلاحيات للمستخدمين بدون أن
يكلف الأمر دقائق معدودة، والجميل كالمعتاد أن مايكروسوفت لم تنسى شيء وجعلت التكامل
في بيئتها أمر يفوق التوقع، ومنها بتوفير مصادقة ASP.NET
واستخدامها في تطبيقات
سطح المكتب بكل سهولة.

About the author

خليل سليم

Leave a Comment

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.