2010-08-20 3 views
8

मैं तीसरे पक्ष के कॉल के लिए कई रीस्टफुल एपीआई विकसित कर रहा हूं, और इन एपीआई को प्रमाणीकरण की आवश्यकता है (apikey & गुप्त आधारित), और प्राधिकरण (HTTP विधि & यूआरआई आधारित)।आराम से एपीआई प्रमाणीकरण सिफारिश?

क्या कोई मौजूदा सॉफ़्टवेयर है जिसे हम पुन: उपयोग कर सकते हैं जो मुझे सुरक्षा परत के लिए अपना कार्यान्वयन करने से रोकता है?

उत्तर

7

HTTP आपको लगता है कि के लिए समर्थन प्रदान किया है, तो आप पहिया बदलने की जरूरत नहीं है देता है

या तो उपयोग:

  • HTTP प्रमाणीकरण बेसिक (एसएसएल के साथ बायपास करने के लिए सादे-पाठ पासवर्ड समस्या पेश करें)
  • HTTP प्रमाणीकरण डाइजेस्ट

प्रमाणीकरण डाइजेस्ट, लाभ दिया है कि यह cleartext में passowrd प्रेषित नहीं करता और पुनरावृत्ति हमलों (nonces के साथ) संभालती है।

हम HTTP Auth Digest (टॉमकैट सर्वलेट कंटेनर का इसके लिए सीधा समर्थन है) का उपयोग करते हैं और हम इसके साथ संतुष्ट हैं।

संपादित करें: कुछ ग्राहकों को डायजेस्ट (इतनी छोटी नहीं) के साथ समस्याएं हैं, इसलिए इन दिनों मैं बेसिक और एसएसएल का चयन करूंगा। बेसिक के लिए लाभ यह भी है कि आप प्रमाणीकरण प्रमाणीकरण कर सकते हैं (उपयोगकर्ता को भेजना: पहले अनुरोध में pwd)। https://rubygems.org/gems/restful_api_authentication

+0

मुझे प्राधिकरण भी चाहिए, उदा। पोस्ट एपीआई जैसे कुछ एपीआई http://www.example.com/adduser, मैं केवल कुछ क्लाइंट तक पहुंच प्रदान करता हूं। – Howard

+1

मैं देखता हूं, फिर यह आपके द्वारा उपयोग किए जाने वाले आपके तकनीकी प्लेटफॉर्म पर निर्भर करता है। यदि आप जावा और सर्वलेट-कंटेनर का उपयोग करते हैं तो आप भूमिकाओं के आधार पर अंतर्निहित प्राधिकरण का उपयोग कर सकते हैं। आप इन भूमिकाओं को अनुमत यूआरएल से जोड़ते हैं और इसलिए दृश्यताएं पैदा कर सकते हैं। फिर आप भूमिकाओं के लिए ग्राहकों का एक समूह समूहबद्ध करते हैं (यानी क्लाइंट 1 + 2 भूमिका 1 से संबंधित है, क्लाइंट 3-6 रोल 2 के लिए)। यदि भूमिका आधार दृष्टिकोण बहुत मोटे अनाज है (यानी प्रत्येक ग्राहक के पास अलग-अलग पहुंच नियम हैं) तो आपको एक और प्राधिकरण परत लागू करने की आवश्यकता है। लेकिन सबसे पहले कोशिश करें कि भूमिका सुरक्षा आपकी आवश्यकताओं के अनुरूप है (कार्यान्वित करने में आसान)। –

2

आप ऑन रेल्स (3.2.0 या अधिक) रूबी का उपयोग कर अपने एपीआई का निर्माण कर रहे हैं, तो restful_api_authentication मणि की जाँच करें।

  • प्रत्येक पंजीकृत प्रयुक्त में उपयोगकर्ता आईडी और गुप्त पहुंच कुंजी होनी चाहिए।
  • प्रत्येक अनुरोध को एसएके के साथ हस्ताक्षरित किया जाना चाहिए और इसमें उपयोगकर्ता आईडी होना चाहिए। (खाता समय टिकट भी ले लो)।
  • उपयोगकर्ता को दिया गया सर्वर, एसबी से डीबी से पुनर्प्राप्त होता है और हस्ताक्षर बहुत अधिक जारी रहता है, अन्यथा एक त्रुटि लौटाता है, फिर से अनुरोध पर हस्ताक्षर करता है।

कार्यान्वयन बहुत कठिन नहीं है लेकिन आपको खाते में प्रत्येक अनुरोध को ध्यान में रखना होगा कि एसएके को पुनः प्राप्त करने के लिए स्टोर से पूछताछ की आवश्यकता हो। एक विकल्प उपयोगकर्ता आईडी/एसक को स्टोर करने के लिए नोएसक्यूएल डीबी या इसी तरह (जैसे रेडिस या मेमकैच) का उपयोग करना है।

0

अपने प्रौद्योगिकी के स्वतंत्र रूप से आप एडब्ल्यूएस तरह का उपयोग करता है कुछ प्रणाली को लागू कर सकते हैं -