تبحث عن اقتراحات لبناء تأمين بقية API داخل روبي على القضبان

StackOverflow https://stackoverflow.com/questions/247110

سؤال

أنا بدأت في بناء بقية API من أجل مشروع أعمل عليه و هذا قادني إلى القيام بالقليل من البحث كما أن أفضل طريقة لبناء API باستخدام RoR.اكتشفت بسرعة أن افتراضيا ، نماذج منفتحون على العالم و يمكن أن يسمى طريق URL ببساطة عن طريق وضع ".xml" في نهاية URL تمرير المعلمات المناسبة.

إذن السؤال التالي جاء.كيف يمكنني تأمين بلدي التطبيق على منع التغييرات غير المصرح بها?في القيام ببعض البحث وجدت عدة مقالات تتحدث عن attr_accessible و attr_protected و كيف يمكن استخدامها.خاصة URL وجدت الحديث عن هذه نشرت في مايو من '07 (هنا).

كما هو الحال مع كل الأشياء روبي, أنا متأكد من أن الأمور قد تطورت منذ ذلك الحين.لذلك سؤالي هو هل هذا لا يزال أفضل طريقة لتأمين بقية API داخل RoR?

إذا كان لا ماذا تقترح في إما "مشروع جديد" أو "القائمة المشروع"السيناريو ؟

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

المحلول

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

مصادقة HTTP

يمكنك استخدام مصادقة HTTP الأساسية.لهذا, API العملاء سوف تستخدم العادية اسم المستخدم وكلمة المرور فقط ضعه في عنوان URL مثل ذلك:

http://myusername:mypass@www.someapp.com/

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

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

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

مفتاح API

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

واحد الجانب السلبي هنا هو أنه إذا كان أي شخص يحصل شخص آخر مفتاح API ، فإنها يمكن أن تجعل طلبات المستخدم.أعتقد أنه من خلال جعل جميع طلبات API استخدام HTTPS (SSL) ، يمكنك تعويض هذه المخاطر إلى حد ما.

الجانب السلبي الآخر هو أن المستخدمين استخدام نفس بيانات اعتماد المصادقة (على مفتاح API) في كل مكان يذهبون.إذا كانت تريد أن تلغي الوصول إلى API العميل الخيار الوحيد هو تغيير API الرئيسية التي سيتم تعطيل جميع العملاء الآخرين كذلك.هذا يمكن تخفيفها من خلال السماح للمستخدمين إنشاء عدة مفاتيح API.

مفتاح API + المفتاح السري التوقيع

إهمال(نوعا ما) - انظر أوث أدناه

إلى حد كبير أكثر تعقيدا هو توقيع الطلب مع مفتاح سري.هذا ما الأمازون خدمات الويب (S3 ، EC2 ، مثل فعله).أساسا أنت تعطي المستخدم 2 مفاتيح:API الرئيسية (ie.اسم المستخدم) و المفتاح السري (ie.كلمة المرور).مفتاح API ينتقل مع كل طلب ، ولكن المفتاح السري هو لا.بدلا من ذلك فإنه يستخدم في تسجيل كل طلب ، عادة عن طريق إضافة معلمة أخرى.

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

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

أوث

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

في العام, انه من الاسهل بكثير على حد سواء API المنتج و المستهلك باستخدام أوث بدلا من إنشاء المفتاح الخاص بك/توقيع النظام.

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

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

نصائح أخرى

كيف يمكنني تأمين بلدي التطبيق لمنع تغييرات غير مصرح بها?

attr_accessible و attr_protected هي مفيدة للتحكم في القدرة على أداء الشامل المهام على ActiveRecord نموذج.أنت بالتأكيد تريد استخدام attr_protected لمنع شكل حقن الهجمات ؛ انظر استخدام attr_protected أو أننا سوف الإختراق لك.

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

ترى روبي على القضبان الأمن دليل (جزء من القضبان وثائق المشروع) طن المزيد من معلومات مفيدة.

أنا أواجه أسئلة مماثلة كما كنت في هذه اللحظة لأنني أيضا بناء بقية api عن القضبان التطبيق.

أقترح عليك التأكد فقط من الصفات التي يمكن للمستخدم تحرير يتم وضع علامة مع attr_accessible.هذا سوف إنشاء قائمة بيضاء من السمات التي يمكن تعيينها باستخدام update_attributes.

ما أقوم به هو شيء من هذا القبيل:

   class Model < ActiveRecord::Base  
       attr_accessible nil  
   end

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

فقط إذا كنت تعرف شخص ما يمكن أن كتلة تعيين الخاصية ليس فقط باستخدام api REST ولكن أيضا استخدام منتظم شكل آخر.

نهج آخر أن يحفظ بناء الكثير من الاشياء نفسك إلى استخدام شيء من هذا القبيل http://www.3scale.net/ الذي يتعامل مع مفاتيح, الرموز, الحصص.... الخللمطورين الفردية.كما لا تحليلات و يخلق المطور البوابة.

هناك روبي/القضبان المساعد روبي API المساعد التي سوف تنطبق على سياسات حركة وصولها - يمكنك استخدامه بالتزامن مع أوث جوهرة.يمكنك أيضا لنا ذلك من خلال إسقاط الورنيش أمام التطبيق استخدام الورنيش lib وزارة الدفاع: الورنيش API وحدة.

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