article cover image
المصادقة - ج١ - ماهي مصادقة المستخدمين (user authentication)، وكيف تتم في الويب
تطوير الويب والبرمجيات 13 دقيقة 0 تعليق 2461 مشاهدة
صورة المستخدم دريد عبدالله
مهندس برمجيات
تم النشر 2023-03-28 09:29:24 - آخر تحديث 2023-03-30 20:44:42

مقدمة

سأتحدث في هذا المقال عن موضوع مهم في الويب، وهو المصادقة (authentication)، وسأتطرق لمفهوم مقارب وهو التخويل أو الإذن (authorisation)،  وكلاهما يعدّان من المواضيع التي يجب على مطور الويب فهمها ومعرفة كيفية عملها.

سلسلة المصادقة والتخويل

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

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

المتطلبات السابقة

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


لمحة عامة عن المفاهيم

قبل الخوض في التفاصيل، دعنا نتعرف بشكل سريع على معنى المصادقة والتخويل.

مصادقة المستخدمين (User Authentication) وتخويلهم (Authorisation)

تعني مصادقة المستخدم ببساطة عملية التحقق من هوية المستخدم الذي يحاول الوصول إلى مورد، نظام أو شبكة ما، والتأكد من كونِه مَن يدّعي.

أما التخويل (authorisation) فيعني التحقق فيما إذا كان من المسموح للمستخدم القيام بما يحاول فعله في النظام، ولا يمكننا الحديث عن التخويل إلا بعد أن تتم المصادقة. فكي يستطيع النظام التحقق فيما إذا كان الشخص مخولاً للقيام بفعل معين، يجب على النظام أن يتحقق من هوية الشخص أولاً.Authentication vs authorisation

مثال عن المصادقة والتخويل

 تخيل أنك قصدت موقع فايس بوك، لنشر  منشور ما، وبدأ الأصدقاء المختلفون بالتعليق على منشورك.

  •  قبل أن تتمكن من النشر، كان عليك أن تقوم (رُبما منذ زمن بعيد) بتسجيل الدخول إلى الموقع، لعلّك استخدمت اسم المستخدم وكلمة السر، أو رقم الهاتف لإثبات هويتك للموقع. في هذه الخطوة، قام الموقع بمصادقتك والتحقق من أنك فعلاً من ادعيت.
  • عندما قمت بنشر المنشور ، استطاع الموقع أن يتحقق من أن طلب النشر قادم منك (سنرى كيف بعد قليل)، بالتالي تمت اضافة المنشور الى يومياتك الخاصة، وربطه بحسابك.
  • عندما قام أصدقاؤك بالتعليق، كان كل منهم قد قام مسبقا بمصادقة نفسه في الموقع، وهكذا نُشر التعليق باسمه.
  • تخيل أنك تريد حذف تعليق شخص ما على منشورك، هنا على الموقع أن يتحقق، هل أنت مخول للقيام بعملية حذف هذا التعليق؟ هنا لا يكفي التحقق من كون هويتك معروفة للنظام أو لا (authentication)، بل ينبغي التحقق من كونك مخول للقيام بالفعل الذي تحاول فعله (authorisation)، فسيكون من السيء لو استطاع أي مستخدم قام بتسجيل دخوله حذف تعليق أي مستخدم آخر.

كيف يستطيع المستخدم إثبات هويته في الويب؟

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

١) التحقق من شيء يعرفه المستخدم (Something you know)
ومن أمثلة ذلك، استخدام اسم المستخدم (أو البريد الاكتروني) وكلمة المرور للمصادقة. في مثل هذه الحالة، تقوم بإثبات أنك مالك الحساب من خلال معرفتك بهذه التفاصيل، وعدم معرفة غيرك بها.

٢) التحقق من شيء يمكله المستخدم (Something you own)
مثل هاتفك المحمول، أو جهاز مصادقة تملكه. تعد رسائل التحقق النصية (verification SMSs) من أشهر الأمثلة على هذه الطريقة، حيث تقوم بعض المواقع بإرسال رسالة نصية إلى هاتفك المحمول (أو بريدك الالكتروني) تحتوي على رمز تحقق، ينبغي عليك ادخاله كي تثبت امتلاكك لرقم الهاتف المرتبط بالحساب.
كما وباتت بعض المواقع (مثل فيس بوك وغوغل) تقدم وسيلة أسلس للمصادقة، فإذا ماكنت قد سجلت دخولك مسبقاً الى  غوغل على جهازك المحمول، وحاولت تسجيل الدخول على جهاز آخر، يقوم تطبيق غوغل بإظهار اشعار على جهازك المحمول يسمح لك من خلاله بمصادقة تسجيل الدخول الذي يتم على جهازك الآخر بشكل سلس وآمن.

٣) التحقق من شي في المستخدم نفسه (Something you are)
مثل المعلومات البيومترية كصورة وجه المستخدم، أو بصمة إصبعه أو غير ذلك.

الصورة من موقع frontegg.com

وعادة ما تدمج المواقع والأنظمة القوية أكثر من طريقة من الطرق السابقة لتحقيق درجات أعلى من الأمان، مثلا بعد أن يتم تسجيل الدخول باستخدام اسم المستخدم وكلمة السر، يقوم الموقع بإرسال رمز تحقق (أو يطلب منك إدخال كود تحقق من خلال تطبيق مصادقة خارجي قمت بإعداده مسبقا مثل google authentication) للتأكد من امتلاكك لجهاز المصادقة المعتمد.

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


طرق جمع معلومات المستخدم والحصول عليها

تتعرف مواقع الويب وتطبيقاته على هوية المستخدمين باستخدام واحدة (على الأقل) من الطريقتين التاليتين:

١- بالاعتماد على إنشاء الحساب وتسجيل الدخول في الموقع (Registration and login)

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

أما خلال تسجيل الدخول (Log in or Sign in)، فأنت تحاول أن تُأكّد للموقع بأنك أنت من يستخدمه، وذلك بإحدى الطرق التي تحدثنا عنها مسبقا، مثل معلومات تسجيل الدخول، وأحيانا رمز التحقق أو غير ذلك. بهذه الطريقة يقوم الموقع بمصادقتك، وعادة ما يتذكر هويتك خلال الاستخدامات اللاحقة. 

٢- بالاعتماد على مزود هوية (Identity Provider)

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

أ) مواقع التواصل الاجتماعي  (Social Login)

العديد من المواقع لم تعد تتطلب من المستخدم إنشاء حساب مخصص في الموقع، بل باتت تسمح بتسجيل الدخول من خلال مواقع التواصل الاجتماعي. تلعب هذه المواقع هنا دور ما يدعى بمزود الهويات (identity provider)، فهي تزود باقي المواقع بهوية المستخدمين، ومن أمثلة هذه المواقع (Facebook, Google, Github) وغيرها الكثير.

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

عادة ما تستخدم المواقع المختلفة (clients) معايير معروفة مثل:

- (OpenID Connect): لمشاركة معلومات المستخدم (المصادقة) وتطبيق تسجيل الدخول بوساطة وسائل التواصل الاجتماعي

- (OAuth 2.0 or Open Authorisation): للسماح للمستخدم بتخويل تلك المواقع بالوصول إلى أجزاء من بياناته الشخصية، مثل البريد الالكتروني، قائمة جهات الاتصال، وغير ذلك. 

ب) تسجيل الدخول الوحيد (Single Sign On)

تشبه هذه الطريقة الطريقة السابقة، بحيث تعتمد المواقع والأنظمة المختلفة (وتدعى في هذا السياق مزودي الخدمة Service providers) على نظام وحيد لمصادقة المستخدمين، يدعى بـ SSO، ويسمح هذا النظام للمستخدمين بتسجيل الدخول، والتحقق من هويتهم بطريقة آمنة، قبل "إخبار مزودي الخدمة" هؤلاء فيما اذا كانت تمت مصادقة المستخدم أو لا، كذلك بصلاحياتهم. 

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

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

عادة ما تستخدم هذه الخدمات معيار يدعى SAML (Security Assertion Markup Language) لتطبيق ميكانيكية المصادقة هذه.

يمكنك قراءة المزيد عن تسجيل الدخول (والمصادقة) باستخدام مزودات الهوية من هنا: الفرق بين OAuth 2.0, OpenID connect and SAML


طرق تبادل معلومات المصادقة بين العميل (client) والمخدم (server)

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

أولا: المصادقة باستخدام الجلسة (Session-based authentication)

يمكن استخدام هذه الطريقة على كل من مواقع الويب وتطبيقات الموبايل، مع بعض الاختلافات البسيطة. تعتمد هذه الطريقة على إنشاء ما يدعى بالجلسة (session) عند قيام المستخدم بتسجيل الدخول باستخدام معلوماته السرية (login credentials)، وتخزين هذه الجلسة في طرف المخدم.

تحتوي الجلسة على معرف الجلسة (Session ID) وهو رقم أو رمز فريد يتم استخدامه لتعريف هذه الجلسة، معرف المستخدم (User ID)، تاريخ تسجيل الدخول، ناريخ انتهاء الصلاحية وغير ذلك.

يتم إرسال معرف الجلسة إلى العميل (client) ويجب على العميل المحافظة عليه، ففي حالة موقع الويب، يتم تخزينه في طرف العميل (مستعرض الانترنت) في ملف تعريف ارتباط (cookie)، أما في حالة تطبيق الموبايل، يطلق عليه عادة اسم (token) ويتم تخزينه في جهاز المستخدم، وفي كلتا الحالتين يتم إرساله هذا الرمز مع كل طلب جديد إلى المخدم.

عند استلام الطلب، يقوم المخدم  باستخراج معرف الجلسة (session id) ثم البحث عنه في قاعدة بياناته لإيجاد الجلسة الموافقة للمعرف المرسل، من خلاله يتم إيجاد جلسة المستخدم واستخلاص معلوماته، قبل مصادقته وتخويله للقيام بالطلب.

في حالة تطبيقات الموبايل أو الـ (APIs) عادة ما يتم استخدام جلسات قصيرة الأمد (صالحة لساعة مثلا) ويتم استخدام تقنية لتحديث الجلسة بشكل متكرر، لزيادة الأمان.

قمت بنشر مقال منفصل ضمن هذه السلسلة للحديث عن المصادقة باستخدام الجلسة (Session-based authentication) وملفات تعريف الارتباط (Cookies)، يمكنك الاطلاع عليه بعد قراءة هذا المقال.

ثانيا: المصادقة باستخدام الرموز (token based authentication)

الرموز tokens هي عبارة عن عناصر رقمية تحتوي على معلومات عن هوية مالك الرمز (authentication)، ونوع الوصول المسموح له (authorisation)، يتم توليدها من قبل المخدم (server) باستخدام مفتاح سري، وبعدها يصعب العبث بها من قبل أي طرف آخر، ويتم ابقاءها في طرف العميل (client) حيث يستخدمها كمفتاح للوصول.

في معظم الأحيان، يتم الحصول على رمز (token) من المخدم بعد إرسال معلومات المصادقة (credentials) إليه، يحدد هذا الرمز أي من الموارد يستطيع هذا المستخدم (أو العميل client) الوصول إليها.

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

عادة ما يتم استخدام الرموز (tokens) لمصادقة اتصالات تطبيقات الموبايل، والاتصالات من خدمة لأخرى (service-to-service) كما وقد ازداد استخدامها في مجال مصادقة مواقع الانترنت بشكل ملحوظ.

هناك أنواع متعددة من الرموز (tokens)، من أهمها مايعرف برموز الويب المهيكلة (JSON Web Tokens - JWTs)، وقمت بكتابة مقال منفصل عنها ضمن هذه السلسلة: رموز الويب المهيكلة (JSON Web Tokens - JWTs) والمصادقة باستخدام الرموز


في الختام

تعرفنا من خلال هذه المقالة على مفهوم المصادقة (Authentication) والتخويل (Authorisation)، ورأينا نوع البيانات التي تستخدمها مواقع وخدمات الويب لتحقيق كل منهما.

استعرضنا أيضا بعض الخيارات المختلفة التي يمكن لموقعك استخدامها للمساعدة في تطبيق المصادقة والتخويل، كما وتحدثنا تقنيا عن بعض الوسائل المستخدمة لتطبيق المصادقةـ مثل جلسة المستخدم (user session) ورموز الوصول (tokens). 

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

صورة الغلاف من قبل Onur Binay موقع Unsplash

التعليقات (0)