سؤال

أنا أعمل على خدمة راحة لديها بعض المتطلبات:

  1. يجب أن تكون آمنة.
  2. يجب ألا يكون المستخدمون قادرين على تقديم الطلبات.

الحل المقترح الحالي هو أن يكون لديك رأس تفويض مخصص يبدو مثل هذا (هذه بنفس الطريقة التي تعمل بها خدمات الويب Amazon):

Authorization: MYAPI username:signature

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

التطبيق الذي سيستخدم هذه الخدمة هو تطبيق iPhone ، لذلك كنت أعتقد أنه يمكن أن يكون لدينا مفتاح عام مضمن في التطبيق الذي يمكننا القيام بتوقيع إضافي معه ، ولكن هذا يعني أنه يتعين علينا الحصول على توقيعات ، أحدهما لمفتاح المستخدم وواحد لمفتاح التطبيق؟

أي نصيحة سيكون موضع تقدير كبير ، أود أن أحصل على هذا بشكل صحيح في المرة الأولى.

هل كانت مفيدة؟

المحلول

أعتقد أن أبسط طريقة للقيام بذلك بشكل صحيح هي استخدام مصادقة عميل HTTPS. يحتوي موقع Apple على ملف مسلك في هذا الموضوع بالذات.

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

تحرير (2014): غيرت Apple برنامج المنتدى الخاص بها في السنوات الست الماضية ؛ الخيط الآن في https://discussions.apple.com/thread/1643618

نصائح أخرى

الجواب بسيط: لا يمكن القيام به. بمجرد أن تشحن أي حل للمستخدم النهائي ، يمكنه أن يهاجم على الخادم على الخادم الذي يتواصل معه. النسخة الأكثر شيوعًا من هذه المشكلة هي الغش بقوائم Hi-Score في ألعاب Flash. يمكنك أن تجعله أصعب من خلال تضمين نوع من التشفير في العميل والتشويش على الرمز ... ولكن يمكن فك ما يتم تجميعه على الكود المترجمة والمثبت. إنها مجرد مسألة من الوقت والمال الذي ترغب في إنفاقه والمثل للمهاجم المحتمل.

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

ما المشكلة في HTTP Digest المصادقة?

هناك مناقشة أفضل لهذا هنا:

أفضل الممارسات لتأمين API / خدمة الويب REST

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top