تطبيقات سحابية آمنة باستخدام OAuth 2.0 وOpenID Connect
دليل كامل لتأمين تطبيقاتك السحابية باستخدام OAuth 2.0 وOpenID Connect وكيفية تقديم تجربة مستخدم رائعة مع المصادقة والتفويض.
مقدمة
التطبيقات السحابية هي الاتجاه الحالي. على الرغم من أن نوع التطبيق يختلف (ويب، موبايل، سطح المكتب، إلخ)، إلا أنها جميعاً تمتلك خلفية سحابية تقدم خدمات مثل التخزين، الحوسبة، وقواعد البيانات. في معظم الأحيان، تحتاج هذه التطبيقات إلى مصادقة المستخدمين تفويضهم للوصول إلى موارد معينة.
بينما يُمكن بناء آليات مصادقة وتفويض داخلية، أصبحت الأمان واحدة من أهم القضايا عند تطوير التطبيقات السحابية. لحسن الحظ، لدينا معايير مُجرّبة في صناعتنا، مثل OAuth 2.0 وOpenID Connect، لمساعدتنا في تنفيذ المصادقة والتفويض الآمن.
هذه المقالة تفترض الآتي:
- لديك فهم أساسي لتطوير التطبيقات (الويب أو الموبايل أو أي نوع آخر).
- قد سمعت عن مفاهيم المصادقة والتفويض.
- سمعت عن OAuth 2.0 وOpenID Connect.
نعم، "سمعت" تكفي للنقطة 2 و3. ستستخدم هذه المقالة أمثلة من العالم الحقيقي لشرح المفاهيم وتوضيح العملية بالتصورات التوضيحية. هيا نبدأ!
OAuth 2.0 مقابل OpenID Connect
إذا كنت على دراية بـ OAuth 2.0 وOpenID Connect، يمكنك أيضاً متابعة القراءة لأننا سنغطي بعض الأمثلة الواقعية في هذا القسم؛ إذا كنت جديداً على هذه المعايير، فلا بأس بمتابعتك أيضًا حيث سنقدمها بطريقة بسيطة.
OAuth 2.0
OAuth 2.0 هو إطار عمل للتفويض يسمح للتطبيق بالحصول على وصول محدود إلى موارد محمية على تطبيق آخر بالنيابة عن المستخدم أو التطبيق نفسه. تستخدم معظم الخدمات الشهيرة مثل Google وFacebook وGitHub OAuth 2.0 لتسجيل الدخول الاجتماعي (مثلاً، "تسجيل الدخول باستخدام Google").
على سبيل المثال، لديك تطبيق ويب MyApp يريد الوصول إلى Google Drive للمستخدم. بدلاً من مطالبة المستخدم بمشاركة بيانات اعتماده لدى Google Drive، يمكن لـ MyApp استخدام OAuth 2.0 لطلب الوصول إلى Google Drive نيابةً عن المستخدم. إليك تدفق مبسط:
في هذا التدفق، لا يرى MyApp أبداً بيانات اعتمادات Google Drive للمستخدم. بدلاً من ذلك، يتلقى رمز الوصول من Google الذي يسمح له بالوصول إلى Google Drive نيابةً عن المستخدم.
في مصطلحات OAuth 2.0، MyApp هو العميل، وGoogle هو كل من خادم التفويض وخادم الموارد للبساطة. في العالم الحقيقي، غالباً ما يكون لدينا خادم تفويض وخادم موارد منفصلين لتقديم تجربة تسجيل دخول موحدة (SSO). على سبيل المثال، Google هو خادم التفويض وقد يحتوي على خوادم موارد متعددة مثل Google Drive وGmail وYouTube.
لاحظ أن تدفق التفويض الفعلي أكثر تعقيداً من هذا. يحتوي OAuth 2.0 على أنواع منح مختلفة، ونطاقات، ومفاهيم أخرى يجب أن تكون مدركاً لها. لنضع ذلك جانباً الآن وننتقل إلى OpenID Connect.
OpenID Connect (OIDC)
OAuth 2.0 رائع للتفويض، ولكن قد تلاحظ أنه لا يحتوي على طريقة للتعريف بالمستخدم (أي المصادقة). OpenID Connect هو طبقة هوية أعلى OAuth 2.0 تضيف قدرات المصادقة.
في المثال أعلاه، يحتاج MyApp إلى معرفة من هو المستخدم قبل بدء تدفق التفويض. لاحظ أن هناك مستخدمان معنيان هنا: مستخدم MyApp ومستخدم Google Drive. في هذه الحالة، يجب أن يعرف MyApp مستخدم تطبيقه الخاص.
لِنرى مثالاً مباشراً، بافتراض أن المستخدمين يمكنهم التسجيل في MyApp باستخدام اسم مستخدم وكلمة مرور:
نظراً لأننا نقوم بمصادقة المستخدم لتطبيقنا الخاص، فعادةً لا تكون هناك حاجة لطلب إذن مثلما فعل Google في تدفق OAuth 2.0. في الوقت نفسه، نحتاج إلى شيء يمكن أن يحدد المستخدم. يقدم OpenID Connect المفاهيم مثل رمز الهوية ونقطة نهاية معلومات المستخدم لمساعدتنا في ذلك.
قد تلاحظ أن موفر الهوية (IdP) هو مشارك جديد ومستقل في التدفق. إنه نفس الشيء مثل خادم التفويض في OAuth 2.0، ولكن لزيادة الوضوح، نستخدم مصطلح IdP لإظهار أنه مسؤول عن مصادقة المستخدم وإدارة الهوية.
عندما ينمو عملك، قد يكون لديك تطبيقات متعددة تشترك في نفس قاعدة بيانات المستخدم. تماماً مثل OAuth 2.0، يسمح لك OpenID Connect بالحصول على خادم تفويض واحد يمكنه مصادقة المستخدمين لأكثر من تطبيق. إذا كان المستخدم مسجلاً بالفعل في تطبيق واحد، فلن يحتاج إلى إدخال بيانات اعتماده مرة أخرى عندما يتم توجيهه إلى IdP بواسطة تطبيق آخر. يمكن إكمال التدفق تلقائياً دون تدخل المستخدم. يُسمى هذا تسجيل الدخول الموحد (SSO).
مرة أخرى، هذا تدفق مبسط للغاية وهناك تفاصيل أكثر تحت السطح. حالياً، لننتقل إلى القسم التالي لمنع الحمل الزائد للمعلومات.