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

ربما نقوم ببناء نفس الشيء :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 إعجابات