هناك كلمتان تتردان في عالم البرمجة كثيرا و هما Authentication و Authorization، فهل سمعت عنهما من قبل؟
الكثير من المبرمجين يخافون (أو يكبرون) هذا الموضوع كثيرا لكنه في الحقيقة بسيط جدا و ممتع. و اليوم سنقوم بتدمير صورة الوحش المخيف التي يراها الكثير فهيا بنا…
ماهو الفرق بين Authentication و Authorization؟
مهما كان نوع التطبيق الذي تعمل عليه، هناك بعض الموارد و المعلومات أو الصفحات التي تتطلب أن تعرف من هو ذلك الشخص قبل أن تقدمها له. هذا هو ببساطة مفهوم ال authentication أو المصادقة
لما تتعرف على الشخص (أي أتممت مصادقة العضو) تستطيع أن تعرف هل تسمح له بالوصول لذلك المحتوى أو لا. و هذا ببساطة أيضا مفهوم ال authorization أو التراخيص
بعد أن انتهينا من الجزء الممل الخاص بالتعريفات، يمكننا الآن أن نغوص في بعض التفاصيل التقنية
و أول سؤال…
ماهي المكونات الأساسية لنظام مصادقة الأعضاء؟
أكيد سيتوجب عليك لبناء نظامك تسجيل أعضاءك في مكان ما (لمشروع عادي سيكون في قاعدة البيانات). يمكنك تسجيل أي بيانات تريدها لكن أقل ما تحتاجه في نظام المصادقة هو اسم المستخدم و كلمة السر.
مثلا في بايثون سيكون بهذا الشكل
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
#...
class User(db.Model):
__tablename__ = 'user'
username = db.Column(db.String, primary_key=True)
password = db.Column(db.String)
def is_active(self):
"""True, as all users are active."""
return True
ما يجب أن تحذر منه على وجه الخصوص في نظام المصادقة هو تسجيل كلمة السر بشكلها الحقيقي لأن ذلك سيجعلها عرضة للسرقة إذا ما تم سرقة بيانات المستخدمين بطريقة أو بأخرى.
ما ستفعله بدلا من ذلك هو تشفيرها بطرق تشفير أحادية الاتجاه (يعني يسمح لك بتحويل كلمة السر إلى شكلها المشفر و لكن العكس مستحيل) مثل استعمال خوارزميات SHA و MD5 ( لكن لا تقلق ستجد مكتبات جاهزة لاستعمال هاته الخوارزميات في كل اللغات )
و هنا قد تطرح السؤال: كيف يمكنني إذا مقارنة كلمة السر عند المصادقة؟
ببساطة سيتطلب ذلك منك تشفير كلمة السر و مقارنتها في كل مرة
إلى هنا يكون عندك نظام للمستخدم لإرسال اسم المستخدم و كلمة السر و مصادقة المستخدم ثم السماح له بالوصول لمحتوى معين أو العكس عند عدم تطابق اسم المستخدم أو كلمة السر
و هنا نصل إلى سؤالنا الثاني…
كيف نسجل دخول مستخدم لكي لا يضطر كل مرة لإرسال بياناته؟
أكيد لن نجعل المستخدم يرسل بياناته لدخول كل صفحة فهذا الأمر سيجعل الجميع يهرب من نظامنا
لحل هذا المشكل يمكننا اما استعمال sessions أو الجلسات و اما استعمال tokens أو التذاكر
ماهو الفرق بين Session و Token؟
سأضع لكم هنا إقتباس لشرح الأستاذ ياسر لتوضيح الفرق
بعد أن تنتهي من هذا الجزء يسعدني أن أقول لك مبروك أنت الآن تمتلك النظام الهيكلي لمصادقة الأعضاء
لكن لن نتوقف هنا أكيد بل سنحتاج أن نوفر لأعضاءنا الطريقة المناسبة ل
- تسجيل حساب
- تسجيل الخروج
- تغيير كلمة السر
- تأكيد البريد الإلكتروني
الخ… و هذا ما يعرف بنظام الحسابات الذي سنبنيه فوق نظام المصادقة الذي بنيناه
يوجد أيضا بعض الطرق المبتكرة و المستعملة بكثرة في أنظمة المصادقة التي اما سمعت عنها كثيرا (مثل JWT) أو جربتها بنفسك (مثل المصادقة باستعمال Google أو Facebook) و هذا ما سأتحدث عنه في الجزء القادم من الشامل
في الأخير…
رأينا في المقال المكونات الأساسية لنظام المصادقة و عرفنا المفاهيم الأساسية في كل جزء… و رأيت بنفسك مدى بساطة الأمر و أن الصورة المتوحشة لنظام المصادقة ليست إلا أسطورة👌
و الآن حان وقت الأسئلة… ضع كل استفساراتك هنا في الأسفل و سأكون سعيدا بالإجابة عنها كلها