استخدم مفاتيح واجهة برمجة التطبيقات المحددة النطاق

تسمح مفاتيح API بدمج Discourse مع أنظمة أخرى أو أتمتة إجراءات مختلفة. ومع ذلك، فإن القوة العظيمة تحمل مسؤولية عظيمة. فإذا تمكن طرف خبيث من الوصول إلى مفتاح API، فقد يتمكن من الوصول إلى بيانات حساسة أو إجراء تغييرات على موقعك. وللتخفيف من ذلك وإضافة طبقة أمان إضافية، يمكنك الآن تقييد ما يمكن لمفتاح API القيام به باستخدام النطاقات (Scopes).

النطاقات والمعلمات المسموح بها

عند إنشاء مفتاح API جديد، يمكنك اختيار النطاقات التي تريدها. وإذا مررت المؤشر فوق أيقونة :grey_question:، فستظهر لك وصفًا موجزًا لما تفعله. أما زر :link: فسيظهر لك عناوين URL المرتبطة بذلك النطاق.

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

ترحيل المفاتيح الحالية

عند إضافة هذه الميزة، تحولت المفاتيح الحالية إلى مفاتيح “عالمية”. ولترحيلها إلى نطاقات، يتعين عليك إلغاؤها وإنشاء مفاتيح جديدة.

إضافة نطاقات مخصصة

يمكن للإضافات إضافة نطاقات مخصصة عن طريق استدعاء دالة add_api_key_scope:

resource هو رمز يُستخدم لتجميع النطاقات ذات الصلة، بينما action هو كائن يحتوي على السمات التالية:

  • actions: قائمة تحتوي على إجراءات وحدة التحكم المسموح بها. الصيغة هي controller_name#method_name.
  • methods: قائمة بطرق HTTP المسموح بها (مثل %i[get]). استخدم هذا بدلاً من actions للمطابقة بناءً على طريقة HTTP بدلاً من إجراء وحدة التحكم.
  • params: قائمة تحتوي على أسماء المعلمات المسموح بها.
  • aliases: كائن يحتوي على اسم مختلف لوسيط مسموح به.

إذا أردت معرفة كيفية تعريف النطاقات الأساسية، راجع:

24 إعجابًا

يبدو أنني أحصل على استجابة 403 عند محاولة جلب الفئات باستخدام مفتاح API للقراءة فقط

curl -X GET "https://mysite/categories.json" \
-H "Api-Key: mykey" \
-H "Api-Username: system"

حيث أن لدي أذونات للقراءة (read) و (read_list) للمواضيع في مفتاح API. على سبيل المثال، يعمل /top.json مع نفس المفتاح. يعمل الطرفية عند استخدام ‘مفتاح عالمي’ (Global Key)

أود وضع مفتاح API في عميلي لقراءة قائمة الفئات والمواضيع، لذا من المهم الحصول على مفتاح للقراءة فقط!

هل هناك أي توجيهات؟

إعجاب واحد (1)

من المثير للاهتمام أن الأمر يعمل إذا لم تُستخدم أي بيانات اعتماد على الإطلاق!

k
أي curl -X GET "https://mysite/categories.json"

إعجاب واحد (1)

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

إذا كنت تستخدم مفتاح API محددًا بنطاق، فلن تعمل استدعاءات نقاط النهاية غير المدرجة ضمن النطاقات التي اخترتها. يمكنك النقر على زر :link: لمعرفة عناوين URL المقبولة.

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

6 إعجابات

هل تقبلون مقترحات لنطاقات إضافية؟

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

إعجاب واحد (1)

أنا سعيد جداً لأنهم فتحوا واجهة برمجة التطبيقات (API) للإضافات. يمكنك البدء بإضافة ما والتحقق مما إذا كان يمكن دمجها في النواة.

إعجابَين (2)

أعتقد أن pr-welcome لأي نطاقات عامة مفيدة يمكنك التفكير فيها. على سبيل المثال group_membership.edit؟

5 إعجابات