العربية
  • مصادقة
  • تطوير
  • التحقق

هل تحتاج إلى بناء نظام مصادقة خاص بك للتطبيقات؟

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

Gao
Gao
Founder

الخلفية

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

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

المقدمة

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

كانت جزءًا يمكن إهماله لأن كل شيء كان بسيطًا منذ 20 عامًا:

  • تنفيذ نظام تسجيل دخول واشتراك باستخدام اسم المستخدم وكلمة المرور.
  • إنشاء آلية للحفاظ على جلسة المستخدم.
  • ماذا عن الأمان؟ MD5 هو الجواب.

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

قد يبدو الأمر مقلقًا، لكن دعني أمر بمثال.

مثال: متجر كتب على الإنترنت

لنفترض أنك تحاول بناء متجر كتب على الإنترنت مع خدمة API وتطبيق واجهة ويب.

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

لقد كتبت مقالًا CIAM 101: المصادقة، الهوية، SSO لمناقشة هذه المفاهيم بالتفصيل.

اختيار طرق المصادقة

لنبدا بـ "التحقق من الهوية"، وهو تسجيل دخول المستخدم في مثالنا. بجانب طريقة المستخدم وكلمة المرور، هنا بعض الطرق المنشرة التي يعتمدها الناس لتحسين التحويل والأمان للمستخدم:

  • بدون كلمة مرور، أي كود التحقق الديناميكي (عبر البريد الإلكتروني أو الرسائل القصيرة)
  • تسجيل الدخول الاجتماعي (جوجل، فيسبوك، إلخ.)

اختيار الطريقة يعتمد على القرار التجاري، بينما يمكننا أن نلقي نظرة على الجهد التقني:

  • بالنسبة للطريقة بدون كلمة مرور، تحتاج إلى العثور على مزود لإرسال أكواد التحقق عبر البريد الإلكتروني أو الرسائل القصيرة؛ ثم الدمج مع خدمة API الخاصة بك (قد تحتاج واجهات جديدة).
  • بالنسبة لتسجيل الدخول الاجتماعي، يجب عليك الالتزام بإرشادات الدمج الخاصة بمزودي الهوية الاجتماعية الذين ترغب في استخدامها. بالإضافة إلى ذلك، يجب عليك إنشاء خريطة بين معرفات المستخدم في متجر الكتب ومعرفات مزود الهوية.
    • على سبيل المثال، عندما يدخل المستخدم باستخدام حساب Gmail [email protected]، يمكنك ربط عنوان البريد الإلكتروني هذا بالمستخدم foo في متجر الكتب. هذه العملية تساعدك على بناء نظام هوية موحد وتسمح للمستخدم بتعديل أو إلغاء ارتباط الهوية الاجتماعية في المستقبل.

تصميم وتنفيذ تجربة تسجيل الدخول

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

عندما كنت أعمل في Airbnb، كان هناك فريق مكرس بالكامل لتحسين تجربة تسجيل الدخول للعديد من المنصات. قاموا بإجراء العديد من اختبارات A/B لتحديد التوليفة التي حققت أعلى معدل تحويل.

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

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

المزيد من الأشياء التي يجب التفكير فيها لجعلها أفضل:

  • هل تحتاج إلى دمج عمليات تسجيل الدخول والتسجيل لطريقة معينة؟
  • هل تحتاج إلى تدفق "نسيت كلمة المرور" للسماح للعملاء بإعادة تعيين كلمات مرورهم بشكل مستقل؟

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

الأمن وتبادل الرموز

يمكن أن يكون الأمان جبل عبء خفي. سيكون من الرائع إذا كنت على دراية بـ OpenID Connect أو OAuth 2.0، حيث إنهما يستخدمان على نطاق واسع وتم اختباره بشكل مكثف. OpenID Connect جديد نسبيًا ولكنه مصمم لـ "المصادقة على المستخدم"، وهو مناسب تمامًا لمتجر كتب على الإنترنت.

بدون الخوض في التفاصيل الخاصة بالمعايير، لا تزال هناك بعض الأشياء التي يجب أخذها في الاعتبار:

  • ما هي طريقة التشفير التي يجب استخدامها لكلمات المرور؟
  • ما هي العملية لعملية المصادقة والتفويض القياسية؟
  • كيف يعمل تبادل الرموز (رمز الوصول، رمز التجديد، رمز الهوية، إلخ.)؟
  • كيف يمكن استخدام مفاتيح التوقيع في الرموز وكيف يمكن التحقق من صحة التوقيع لحماية الموارد؟
  • كيف يمكن منع الهجمات بين العميل والخادم؟

أخيرًا، يمكنك تقديم تجربة تسجيل دخول جيدة وتسليمها لعملائك.

نموذج التفويض

كمتجر كتب، تحتاج إلى فصل الموارد بين العملاء والبائعين. على سبيل المثال، يمكن للعملاء تصفح جميع الكتب، بينما يمكن للبائعين إدارة كتبهم المعروضة للبيع. من الجيد البدء بفحوصات بسيطة باستخدام if-else؛ ومع ذلك، مع نمو الأعمال، قد تحتاج إلى الاستفادة من نموذج أكثر مرونة مثل التحكم في الوصول على أساس الأدوار (RBAC) أو التحكم في الوصول على أساس السمات (ABAC).

لقد كتبت أيضًا مقالًا CIAM 102: التفويض والتحكم في الوصول على أساس الأدوار لشرح مفاهيم التفويض الأساسية ونموذج RBAC.

اتخاذ القرار

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

لاتخاذ القرار، سأطرح على نفسي الأسئلة التالية:

  • ما مدى إلحاج المشروع؟
  • ما مقدار الجهد الذي أتوقع بذله في المصادقة مقارنةً بالأعمال؟
  • ما هي الأولوية لتجربة المستخدم، الأمان، والصيانة؟
  • أي جزء / أجزاء أحتاج إلى السيطرة الكاملة عليها؟ ما مدى المعرفة التي يجب علي أن أكتسبها؟
  • إذا اخترت بعض الأطر / الحلول، هل هي جيدة بما يكفي للتخصيص أو التمديد؟
  • إذا نمت الأعمال، هل سأحتاج إلى تقديم نموذج مصادقة جديد؟
  • إذا وجدت موفرًا مناسبًا، هل هو آمن بما فيه الكفاية لاستخدامه؟ هل أحتاج إلى خطة انسحاب في حال حدوث أي شيء للموفر؟

مع الأسئلة في الاعتبار، اكتشفت حقائق:

  • بناء نظام مصادقة موثوق به معقد للغاية.
  • الموفرون الحاليون لا يمكنهم تلبية جميع المعايير اللازمة.

لذلك قررت البدء في مشروع مخصص (Logto) للمصادقة، وتبني المجتمع المفتوح منذ اليوم الأول.

آمل أن يساعدك هذا المقال.