نتائج API غير طبيعية

مرحبًا!

أحاول تنفيذ استدعاء API لإنشاء موضوع جديد. Discourse API Docs

أستخدم Postman لإرسال مفتاح API واسم المستخدم ونوع المحتوى كعناوين، وبيانات JSON في الجسم.

لقد تأكدت من صحة اسم المستخدم ومفتاح API، لكن استدعاء API يعيد صفحة تسجيل الدخول بصيغة HTML.

هل هذا متوقع؟ وكيف يمكنني تجاوز هذه المشكلة؟

هل يمكنك نسخ ولصق نسخة cURL من استدعاء واجهة برمجة التطبيقات الذي تحاول تنفيذه؟

حسناً…

curl -X POST 'https://staging-discuss.newrelic.com/posts.json' \
     -H 'Api-Username: RyanVeitch' -i \
     -H 'Api-Key: My-API-Key' -i \
     -H 'Content-Type: application/json' \
     -d \
'{
    "title": "My fancy title",
    "raw": "Some random text to fill my topic",
    "category": 212,
    "created_at": "2020-06-22"
}'

في الطرفية، أحصل على هذا المخرجات:

HTTP/1.1 307 Temporary Redirect
Proxied-By: Service Gateway
Strict-Transport-Security: max-age=31536000; includeSubDomains
Location: https://staging-login.newrelic.com/login?return_to=https%3A%2F%2Fstaging-discuss.newrelic.com%2Fposts.json
content-type: text/plain;charset=UTF-8
content-length: 138

Redirecting to a different URI: https://staging-login.newrelic.com/login?return_to=https%3A%2F%2Fstaging-discuss.newrelic.com%2Fposts.json%

أخبرني إذا كنت بحاجة إلى أي شيء آخر من جهتي للمساعدة في استكشاف الأخطاء وإصلاحها :smiley:

يبدو أن لديك إعدادًا مخصصًا للغاية يتضمن وكيلًا في المنتصف.

هذا ليس سلوكًا قياسيًا في Discourse، لذا يبدو أن السبب هو جهاز الوكيل الخاص بك.

ربما يوجد رأس (Header) خاص يمكنك إرساله لتجاوز الوكيل؟ يجب التحقق من وثائق ذلك المنتج.

رائع! شكرًا لك @Falco - سأبدأ العمل مع فريق التطوير لدينا :slight_smile:

مرحبًا @Falco، لقد تمكنت من اجتياز الوكيل، لكنني الآن أواجه أخطاء 403 BAD CSRF.

أرى أن هذا الموضوع يبدو غير مكتمل نوعًا ما…

هل لديك أي أفكار حول كيفية تجاوز هذه الأخطاء؟

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

شكرًا لك @blake

الوكيل الخاص بنا مخصص بالكامل ومُصمم داخليًا وهو الطبقة الأمامية للجمهور.

أنا متصل بشبكة VPN داخل شبكتنا الداخلية، وأنا لا أتصل بعنوان URL العام، بل أتصل بعنوان URL للخلفية (الواقعة خلف الوكيل)، لذا، لا ينبغي أن تمر الطلبات عبر الوكيل.

مثال discourse في بيئة الاختبار لدينا هو الإصدار 2.3.10

هل يتصرف الـ API بشكل مختلف في هذا الإصدار؟

لا، الإصدار v2.3.10 لا يزال يحتوي على كل ما يتعلق بالمصادقة القائمة على الرؤوس، لذا لا ينبغي أن يتصرف بشكل مختلف.

أنت تواجه هذا السطر:

وهو ما يعني أن طلبك معطوب بطريقة ما ولا يمكنه اكتشاف أنه طلب API.

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

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

@blake

شكرًا لك! سأتواصل مع فريق التطوير الخاص بنا :smiley:

نقدر مساعدتك