الوصول عبر Discourse API، تم رفض المفتاح و/أو المستخدم

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

تمكنت من استرداد مفتاح طوله 32 حرفًا (هل هذا صحيح؟)، وفي إعدادات الأمان لحسابي، يظهر التطبيق بهذه الأذونات:

قراءة الكل
كتابة الكل
تحديثات مباشرة
إرسال إشعارات إلى خدمات خارجية
قراءة ومسح الإشعارات
قراءة معلومات جلسة المستخدم
إنشاء رمز تسجيل دخول لمرة واحدة

يبدو هذا جيدًا جدًا. ومع ذلك، عندما أحاول الوصول عبر نص برمجي باستخدام:

from pydiscourse import DiscourseClient

client = DiscourseClient(
        'https://forum.example.com',
        api_username='tflidd',
        api_key='388b79103056fede1d3223dae032df99')

client.user("tflidd")

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

هل أستخدم اسم المستخدم الخاص بي أم اسم التطبيق؟
هل مفتاح API على الأقل بالتنسيق الصحيح، ربما حدث خطأ في فك التشفير؟

إذا استخدمت curl كما هو موضح هنا (Discourse-user-notes API - #4 by codetricity):

curl https://forum.example.com/t/95783.json \ -H 'Api-Key: 388b79103056fede1d3223dae032df99' \ -H 'Api-Username: tflidd'

أحصل أيضًا على خطأ:
{"errors":["You are not permitted to view the requested resource. The API username or key is invalid."],"error_type":"invalid_access"}

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

أنا مجرد مشرف، وليس لدي وصول مباشر للمسؤول. يمكنني طلب المزيد من المعلومات من السجلات، إذا كان لديك مؤشرات حول ما يجب البحث عنه.

في حال كان الأمر مهمًا، فإن الإصدار المثبت هو: 3.2.0.beta4-dev

تم تصميم مكتبة DiscourseClient بلغة بايثون للعمل مع مفتاح واجهة برمجة تطبيقات المسؤول (المسؤول → واجهة برمجة التطبيقات).
ما تقوم بإنشائه من generate_api_key هو مفتاح واجهة برمجة تطبيقات العميل.
تحتاج إلى تمرير رؤوس API-User-Key و API-User-Username بدلاً من ذلك.
على سبيل المثال:

curl https://forum.example.com/t/95783.json -H 'Api-User-Key: 388b79103056fede1d3223dae032df99' -H 'Api-User-Username: tflidd'

:+1: هذا يعمل، أنت لا تعرف كم من الوقت أمضيته في هذا.

لكن نقاط نهاية واجهة برمجة التطبيقات (API) هي نفسها الموضحة هنا

؟

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

بالنسبة لعميل pydiscourse، هناك حل بديل غير أنيق لاستخدام رأس مختلف:

from pydiscourse import DiscourseClient

client = DiscourseClient(
        'https://forum.example.com',
        api_username='tflidd',
        api_key='388b79103056fede1d3223dae032df99')

headers = {
            "Accept": "application/json; charset=utf-8",
            "User-Api-Key": '388b79103056fede1d3223dae032df99',
            "User-Api-Username": 'tflidd',
        }

slug = "abc"
topic_id = 1234

client.topic(slug=slug, topic_id=topic_id, override_request_kwargs=override_request_kwargs)
إعجاب واحد (1)