إنشاء مفتاح API للمستخدم بدون موافقة المستخدم

أنا أستخدم Discourse بدون واجهة أمامية، وأستطيع الحصول على معلومات المستخدم باستخدام مفتاح واجهة برمجة تطبيقات المسؤول، ولكن كان يُوصى بإنشاء واجهة برمجة تطبيقات مستخدم لكل مستخدم بدلاً من ذلك. لذلك، أحاول استخدام هذه الطريقة بدلاً من ذلك، ولكني لا أريد أن يضطر المستخدم إلى الانتقال إلى واجهة مستخدم جديدة لـ “الموافقة” على واجهة برمجة التطبيقات التي أقوم بإنشائها له.

لذلك، حلي هو إرسال التأكيد برمجيًا. من طلب GET إلى ‘/user-api-key/new’، أستطيع استخلاص بيانات عنصر ‘form’ ولكن لا يمكنني إرسال طلب POST إلى ‘/user-api-key/’ لأنني سأحصل على خطأ CSRF.

لقد قمت بتعطيل حماية CSRF لـ discourse connect، ولكن هل هناك حماية أخرى لـ api-key؟
SiteSetting.discourse_connect_csrf_protection

إذا لم يكن الأمر كذلك، فلن أستخدم مفاتيح واجهة برمجة تطبيقات المستخدم حتى أتمكن من إنشائها دون مقاطعة واجهة المستخدم.

شكراً مقدماً!

يبدو أن حلاً كان موجودًا في الإصدارات السابقة ولكني لا أرى أي إصدار محدث لهذا:

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

ربما نقوم ببناء نفس الشيء :slight_smile: على الرغم من أن مشروعي فقط بدون واجهة أمامية إلى حد ما.

أشك في ذلك، وأن هذا مقصود.

كنت أتساءل عن نفس الشيء، ولكن أعتقد أنه في حالتي سيكون الأمر جيدًا - أنا لا أحاول إخفاء Discourse.

أحد الأشياء التي يجب وضعها في الاعتبار مع مفاتيح واجهة برمجة تطبيقات المستخدم مقابل مفاتيح واجهة برمجة تطبيقات جميع المستخدمين الإداريين هو أنه افتراضيًا يتم تطبيق حدود مختلفة لمعدل الطلبات عليها: Available settings for global rate limits and throttling.

حد معدل طلبات واجهة برمجة تطبيقات المستخدم:
DISCOURSE_MAX_USER_API_REQS_PER_MINUTE : الافتراضي 20
DISCOURSE_MAX_USER_API_REQS_PER_DAY : الافتراضي 2880

حد معدل طلبات واجهة برمجة التطبيقات الإدارية:
DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE : 60

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

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

لاحظ أن المفتاح المنشور أدناه هو لنطاقي المحلي، لذلك لا يوجد خطر في نشره.

معلمات المفتاح غير المشفرة: {key:description:sally} {key:username:sally} {key:scopes:[scope_id:topics:write]} {key:scopes:[key:write]} {key:scopes:[name:write]} {key:scopes:[params:[topic_id]]} {key:scopes:[urls:[/posts (POST)]]} {key:scopes:[selected:true]}

❯ curl -X POST "http://localhost:4200/admin/api/keys" \
      -H "Api-Key: $api_key" \
      -H "Api-Username: system" \
      -H "Content-Type: application/json" \
      -d $json
{"key":{"id":29,"key":"f5c6307b51dd2882bde525dc9775fe7504b55c93fa40177b650f9e6b77a9d25b","truncated_key":"f5c6","description":"sally","last_used_at":null,"created_at":"2024-06-02T00:44:19.944Z","updated_at":"2024-06-02T00:44:19.944Z","revoked_at":null,"user":{"id":3,"username":"sally","avatar_template":"/user_avatar/127.0.0.1/sally/{size}/58_2.png"},"api_key_scopes":[{"resource":"topics","action":"write","parameters":["topic_id"],"urls":["/posts (POST)"],"allowed_parameters":{},"key":"write"}]}}

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

5 إعجابات

هل تستخدم React في الواجهة الأمامية لديك؟ أنا منفتح على إيجاد طريقة للتعاون لتقليل التكرار وزيادة موثوقية التعليمات البرمجية. أعتقد أن المصادقة عبر SSO كانت الجزء الأصعب. لذا، نأمل أن يكون الإبحار سلسًا من هنا.

نعم، إنه تطبيق Remix/React Router. لذا React في الواجهة الأمامية، و Node في الواجهة الخلفية.

لقد كنت أعمل مع ذلك لسنوات. راسلني على هنا إذا كانت لديك أي أسئلة حول ذلك.

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

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

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.