2012-01-09 21 views
26

तो, मैं रीस्टेसी और Google ऐप इंजन का उपयोग कर एक आरईएसटी webservice विकसित कर रहा हूं। मेरा सवाल जीएई से संबंधित नहीं है, लेकिन मैंने इसका उल्लेख केवल मामले में किया है। ऐसा होता है कि स्वाभाविक रूप से मुझे अपने संसाधनों और अपने स्वयं के उपयोगकर्ताओं को सुरक्षित करने की आवश्यकता है (Google की नहीं)।आरईएसटी HTTP प्रमाणीकरण - कैसे?

एक आरईएसटी webservice सुरक्षित करना एक बहुत ही विवादास्पद विषय, या कम से कम एक 'उदार' जैसा लगता है। आरईएसटी इस मामले पर कोई मानक लागू नहीं करता है। मैं वेब और साहित्य पर क्या इसकी पड़ताल की है से, वहाँ कम से कम 3 दृष्टिकोण मुझे लगता है कि अपने आवेदन में फिट कर सकते हैं:

  • HTTP मूल (एसएसएल) के साथ
  • HTTP डाइजेस्ट (साथ एसएसएल)
  • OAuth

OAuth सबसे पूर्ण दृष्टिकोण की तरह लगता है। लेकिन मुझे नहीं लगता कि इस तरह की जटिलता की आवश्यकता है क्योंकि मुझे किसी तीसरे पक्ष के अनुप्रयोगों को अधिकृत करने की आवश्यकता नहीं होगी। यह केवल अपने स्वयं के क्लाइंट अनुप्रयोगों द्वारा उपभोग करने के लिए एक webservice है।

HTTP मूल और HTTP डाइजेस्ट वेब पर सबसे सरल लोगों के रूप में दिखाई देते हैं, लेकिन तथ्य यह है कि मैं उनमें से एक ठोस कार्यान्वयन कभी नहीं पाया है RESTeasy का उपयोग कर, उदाहरण के लिए है। मुझे रीस्टेसी के दस्तावेज़ीकरण में this page और this one मिला है। वे वास्तव में बहुत ही रोचक हैं, लेकिन वे इस विषय (HTTP बेसिक या डाइजेस्ट) पर बहुत कम या कुछ नहीं बताते हैं।

तो, यहाँ मैं पूछ रहा हूँ:

मैं अपने WebService RESTeasy में HTTP मूल या डाइजेस्ट का उपयोग करना कैसे सुरक्षित हैं?

शायद यह इतना आसान है कि दस्तावेज़ीकरण या कहीं और में उल्लेख करने लायक नहीं है? इसके अलावा, अगर कोई मुझे भरोसेमंद webservices को सुरक्षित करने के मामले पर कुछ अंतर्दृष्टि प्रदान कर सकता है, तो यह सहायक हो सकता है।

क्या मैं सही दृष्टिकोण चुन रहा हूं?

+0

http://stackoverflow.com/questions/6296740/authentication-in-play-and-resteasy –

+1

पर एक नज़र डालें, क्षमा करें, लेकिन आप यहां कुछ चीज़ें गलत कर रहे हैं। 1) आपने प्रश्न को उत्तर/आंशिक उत्तर के साथ अपडेट किया है। अगर आपको उत्तर मिला है जो * किसी * द्वारा प्रदान नहीं किया गया है, तो आपको उस उत्तर को जोड़ना चाहिए और इसे स्वीकार्य रूप से चिह्नित करना चाहिए। अगर किसी और ने उत्तर प्रदान किया है, तो आपको * उस * उत्तर को स्वीकृति के रूप में चिह्नित करना चाहिए। 2) यदि आपके पास * अतिरिक्त * प्रश्न है, तो * एक और * प्रश्न पूछें, * अपने प्रश्न में * जोड़ें * जो पहले से दिए गए उत्तरों को अमान्य कर देगा। – casperOne

+1

@ कैस्परऑन, आप सही हैं, क्षमा करें। स्टैक ओवरफ्लो में यह मेरा पहला सवाल था। धन्यवाद। – miguelcobain

उत्तर

6

के संयोजन का इस्तेमाल किया मैं RESTeasy के Interceptors का उपयोग करके यह पूरा करने के प्रबंधित किया है। असल में अनुरोधों को वर्ग जैसे श्रोता का उपयोग करके अवरुद्ध किया जाता है। इस कक्षा में मैं अनुरोध के HTTP शीर्षलेखों का निरीक्षण करता हूं और फिर सामान्य बेसिक-एथ प्रक्रिया चलती है।

उपयोगी लिंक्स:

http://en.wikipedia.org/wiki/Basic_access_authentication
Passing parameters in the message header with a REST API
http://www.alemoi.com/dev/httpaccess/ (सर्वलेट हिस्सा)

मुझे आशा है कि यह किसी को भी मदद करता है।

धन्यवाद।

+0

मैं सिर्फ यह जोड़ना चाहता हूं कि कभी-कभी कंटेनर से प्रमाणीकरण इंजन का उपयोग करना अधिक उपयुक्त हो सकता है। टॉमकैट के लिए [इस पृष्ठ] देखें (http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html) लगभग ** क्षेत्र **। – miguelcobain

+0

इसके अलावा, वसंत सुरक्षा और अपाचे शिरो पर विचार करना न भूलें! – miguelcobain

0

आप OAuth 2 का उपयोग कर देख सकते हैं। यह OAuth 1 के बाद काफी सरल है और सक्रिय रूप से फेसबुक और Google द्वारा बड़े REST API पर उपयोग किया जा रहा है।

+1

मुझे लगता है कि ओएथ 2 का उपयोग करना अच्छा होता है यदि अंतिम उपयोगकर्ताओं को तीसरे पक्ष के अनुप्रयोगों (जैसे एफबी के मामले में) तक पहुंच अधिकृत करना होगा, लेकिन यदि एपीआई का ग्राहक अपना स्वयं का आवेदन है और वे इसका हिस्सा हैं पारिस्थितिक तंत्र, मुझे लगता है कि ओथ की आवश्यकता नहीं है। – middlehut

+0

@Lyuben की तरह, एकमात्र एप्लिकेशन जो इस सेवा का उपभोग करेंगे, वे मेरे हैं। ओएथ इस मामले में उपयुक्त क्यों होना चाहिए? – miguelcobain

+0

मैंने "मेरे संसाधनों और अपने स्वयं के उपयोगकर्ताओं को सुरक्षित करने के लिए" पढ़ा है ताकि यह संकेत दिया जा सके कि आपके पास ऐसे उपयोगकर्ता थे जो OAuth का उपयोग करेंगे। यदि आप ओएथ की तुलना में एकमात्र उपभोक्ता हैं तो अधिक है। बेसिकऑथ ठीक होगा। – abraham

6

एक आरईएसटी एपीआई सुरक्षित करने का सबसे आसान तरीका एसएसएल पर HTTP बेसिक प्रमाणीकरण का उपयोग करना है। चूंकि शीर्षलेख एन्क्रिप्टेड हैं, इसलिए डाइजेस्ट का उपयोग करने का कोई मतलब नहीं है। यह तब तक बढ़िया काम करना चाहिए जब तक आप क्लाइंट को पासवर्ड सुरक्षित रख सकें।

+0

हां, जो मैंने समझा और यह प्रश्न में समझाया गया है। लेकिन स्पष्टीकरण के लिए धन्यवाद। सवाल यह है कि रीस्टेसी का उपयोग करके इसे लागू करने का सबसे अच्छा तरीका कौन सा है। – miguelcobain

+0

क्षमा करें, मुझे स्किमिंग के लिए यही मिलता है। ' बेसिक' 'के बारे में पहले लिंक में कुछ जंक है लेकिन मुझे नहीं लगता कि उपयोगकर्ता नाम/पासवर्ड को कैसे कॉन्फ़िगर किया जाए। शायद आपको इसे "जावा" के रूप में फिर से टैग करना चाहिए ताकि अधिक लोग इसे देख सकें। –

+0

हां, यही वह चीज थी जिसे मैंने देखा था। उपयोगकर्ताओं को स्टोर और पुनर्प्राप्त करने के लिए मुझे अपने डेटा बैकएंड का उपयोग करने की आवश्यकता होगी। मैंने टैग "जावा" जोड़ा है। – miguelcobain

1

एसएसएल के बिना किसी प्रमाणीकरण विधि का उपयोग करते समय आपको निश्चित रूप से सुरक्षा जोखिम का सामना करना पड़ेगा।

लेकिन यदि आपने SSL का उपयोग किया है, तो आप आमतौर पर खराब प्रदर्शन से पीड़ित होंगे।

ओथ वास्तव में तीसरे पक्ष को आपके वेब सर्विसेज तक पहुंच प्राप्त करने की अनुमति देने का एक समाधान है।

सीमित चयन के कारण, एक मौजूदा webservices प्रमाणीकरण की आवश्यकता करने के लिए अपने समाधान एसएसएल + बुनियादी

संबंधित मुद्दे