تأمين موارد API للاتصال من آلة إلى آلة
تعلم كيفية الاستفادة من OAuth 2.0 و JWT لتأمين موارد API للاتصال من آلة إلى آلة.
عند بناء مشروع يتضمن خدمات متعددة، فإن أمان موارد API هو مصدر قلق بالغ الأهمية. في هذه المقالة، سأوضح لك كيفية الاستفادة من OAuth 2.0 و JWT لتأمين الاتصال بين الخدمات (من آلة إلى آلة)، وكيفية تطبيق التحكم في الوصول القائم على الأدوار (RBAC) للالتزام بمبدأ الحد الأدنى من الامتياز.
البدء
للمتابعة، أفترض أن لديك المتطلبات السابقة التالية:
- حساب Logto Cloud، أو نسخة مستضافة ذاتياً من Logto
- على الأقل خدمتين تحتاجان للتواصل مع بعضهما البعض
لأغراض العرض التوضيحي، لنفترض أن لدينا الخدمات التالية:
- خدمة عربة التسوق التي توفر APIs لإدارة عربات التسوق
- نقطة النهاية:
https://cart.example.com/api
- نقطة النهاية:
- خدمة الدفع التي توفر APIs لمعالجة المدفوعات
- نقطة النهاية:
https://payment.example.com/api
- نقطة النهاية:
تدفق المصادقة
الآن، تحتاج خدمة العربة إلى الاتصال بخدمة الدفع لمعالجة ا لمدفوعات. تدفق المصادقة كالتالي:
بعض المفاهيم الرئيسية في الرسم البياني أعلاه:
- JWT (RFC 7519): رمز ويب JSON. انظر المقال السابق لدينا للحصول على مقدمة عن JWT.
- JWK (RFC 7517): مفتاح ويب JSON يُستخدم للتحقق من توقيع JWT. مجموعة JWK هي مجموعة من JWKs.
- منحة "client_credentials" (RFC 6749): نوع منحة في OAuth 2.0. يستخدم بيانات اعتماد العميل للحصول على رمز الوصول. سنشرح التفاصيل في الأقسام التالية.
كل مشارك في الرسم البياني أعلاه له دور يلعبه في تدفق المصادقة:
- خدمة العربة: العميل الذي يحتاج إلى الاتصال بخدمة الدفع. على الرغم من أنها خدمة، إلا أنها لا تزال عميل في سياق OAuth 2.0، ونطلق على هذه العملاء "تطبيقات من آلة إلى آلة" في Logto.
- Logto: خادم تفويض OAuth 2.0 الذي يصدر رموز الوصول.
- خدمة الدفع: مورد API الذي يوفر APIs لمعالجة المدفوعات.
لنمر عبر تدفق المصادقة خطوة بخطوة.
الإعداد الأولي
لإجراء تدفق المصادقة، نحتاج إلى إنشاء تطبيق من آلة إلى آلة (خدمة العربة) ومورد API (خدمة الدفع) في Logto.
إنشاء مورد API
بالنظر إلى أن خدمة العربة تحتاج إلى أن تكون على علم بمورد API لخدمة الدفع عند إجراء المصادقة، نحتاج إلى إنشاء مورد API أولاً. انتقل إلى Logto Console، انقر على موارد API في الشريط الجانبي الأيسر، وانقر على إنشاء مورد API. في الحوار المفتوح، نقدم بعض الدروس التعليمية لمساعدتك على البدء. يمكنك أيضًا النقر على متابعة بدون درس تعليمي لتخطيه.
أدخل اسم API والمعرف، على سبيل المثال، خدمة الدفع
و https://payment.example.com/api
، ثم انقر على إنشاء مورد API.
بعد إنشاء مورد API، سيتم تحويلك إلى صفحة التفاصيل. يمكننا تركها كما هي الآن.
إنشاء تطبيق من آلة إلى آلة
انقر على التطبيقات في الشريط الجانبي الأيسر، وانقر على إنشاء تطبيق. في الحوار المفتوح، ابحث عن بطاقة من آلة إلى آلة، ثم انقر على البدء في البناء.
أدخل اسم التطبيق، على سبيل المث ال، خدمة العربة
، وانقر على إنشاء تطبيق. سيظهر دليل تفاعلي لمساعدتك على إعداد التطبيق. يمكنك اتباع الدليل لفهم الاستخدام الأساسي، أو النقر على إنهاء والانتهاء لتخطيه.
طلب رمز الوصول
نظرًا لأن التطبيقات من آلة إلى آلة تعتبر آمنة (على سبيل المثال، يتم نشرها في شبكة خاصة)، يمكننا استخدام منحة "client_credentials" في OAuth 2.0 للحصول على رمز الوصول. يستخدم المصادقة الأساسية لمصادقة العميل:
- عنوان URL للطلب هو نقطة النهاية للرموز في مثيل Logto الخاص بك. يمكنك العثور عليه ونسخه في علامة التبويب الإعدادات المتقدمة في صفحة تفاصيل التطبيق من آلة إلى آلة.
- طريقة الطلب هي
POST
. - عنوان
Content-Type
للطلب هوapplication/x-www-form-urlencoded
. - بالنسبة لعناوين
Authorization
، القيمة هيBasic <base64(app_id:app_secret)>
، حيثapp_id
وapp_secret
هما معرف التطبيق والسر للتطبيق من آلة إلى آلة على التوالي. يمكنك العثور عليهما في صفحة تفاصيل التطبيق. - يحتاج جسم الطلب إلى تحديد نوع المنحة ومعرف API. على سبيل المثال،
grant_type=client_credentials&resource=https://payment.example.com/api
.grant_type=client_credentials
: قيمة ثابتة لمنحة "client_credentials".resource=https://payment.example.com/api
: معرف API لمورد API الذي يريد العميل الوصول إليه.- إذا كان يجب أن يتم تفويض التطبيق بأذون (صلاحيات)، يمكنك أيضًا تحديد النطاقات في جسم الطلب. على سبيل المثال،
scope=read:payment write:payment
. سنتطرق إلى النطاقات لاحقًا.
إليك مثال على الطلب باستخدام curl
:
سيكون جسم الاستجابة الناجح كالتالي: