2011-02-05 14 views
7

मैं आईफोन और एंड्रॉइड के लिए आरईएसटी एपीआई के साथ बैकएंड एप्लिकेशन लिख रहा हूं। यह एक आंतरिक एपीआई है।आईफोन/एंड्रॉइड के लिए पंजीकरण रीस्ट एपीआई लागू करने का सबसे अच्छा तरीका क्या है?

इस बिंदु पर, मैं उपयोगकर्ता पंजीकरण API को कार्यान्वित करने की कोशिश कर रहा हूं जैसे उपयोगकर्ता मोबाइल ऐप से पंजीकरण कर सकता है।

मैं Django का उपयोग कर लिख रहा हूं और Django के साथ वे वेब अनुरोध के लिए क्रॉस साइट अनुरोध फोर्जरी के साथ आता है। मुझे django-piston का उपयोग करके, REST API के लिए इसे अक्षम करना होगा।

तो मैं अपने पंजीकरण API को स्पैमिंग से कैसे सुरक्षित रख सकता हूं? गला घोंटना? कैप्चा? एक पंजीकरण एपीआई लागू करने के लिए सबसे अच्छा अभ्यास क्या है? पतन क्या है?

मोबाइल ऐप पर एक वेबव्यू लोड करने के लिए एक सुझाव आया था और मोबाइल वेब पंजीकरण फॉर्म है जैसे कि सीएसआरएफ लागू किया जा सकता है। यह एक समाधान है लेकिन एक साफ नहीं है क्योंकि मुझे प्रत्येक मोबाइल डिवाइस या सामान्य जेनेरिक के लिए डिज़ाइन पेज बनाना है जो सभी उपकरणों में उपयुक्त नहीं हो सकता है।

कई सहायता की सराहना की जाती है।

चीयर्स, मिकी

उत्तर

1

मैं इस बात से सहमत हूं कि ओपनआईडी प्रदाता का उपयोग करके इसे प्राप्त करने का एक शानदार तरीका है। आपको http://pypi.python.org/pypi/django-social-auth या इसी तरह की परियोजनाओं में देखना चाहिए। एक अतिरिक्त लाभ यह है कि आपको अपने डेटाबेस में पासवर्ड प्रमाण-पत्र सहेजने की आवश्यकता नहीं है। प्रबंधित करने के लिए कम डेटा, कम डेटा ढीला।

यदि आपको निश्चित रूप से क्लासिक उपयोगकर्ता नाम/पासवर्ड आधारित योजना और पंजीकरण के साथ (शायद ओपनआईडी आधारित सामान जैसे एसओ के साथ) की ज़रूरत है, तो मैं पिस्टन प्रदान करता हूं जो थ्रॉटलिंग के साथ जाऊंगा। व्यक्तिगत रूप से मैं केवल अंतिम उपाय के रूप में कैप्चा का उपयोग करता हूं, और एक आरईएसटी इंटरफेस के माध्यम से ऐसा करना शायद काफी परेशान है। पंजीकरण चरण जारी रखने से पहले क्या आप कैप्चा का अनुरोध करते हैं? आप कैसे नोट करते हैं कि इस उपयोगकर्ता ने कैप्चा (सत्र + कुकीज़, ...) पूरा कर लिया है? आप वेबक्यू का उपयोग किए बिना रीकैप्चा या इसी तरह की सेवाओं का उपयोग नहीं कर सकते (जो पूरे आरईएसटी दृष्टिकोण अप्रचलित आईएमओ प्रस्तुत करेगा)।

मैं एक वेब व्यू का उपयोग करके पुनरीक्षण करूँगा। यदि आप अपना इंटरफ़ेस साफ़ और सरल रखते हैं तो इसे किसी भी स्मार्टफ़ोन प्लेटफॉर्म पर किसी भी सम्मेलन के साथ जार नहीं करना चाहिए।

+0

सिर्फ उत्सुक है, कैप्चा का उपयोग क्यों नहीं किया जा सकता है आरईएसटी एपीआई स्तर पर? –

+3

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

+0

स्टेटलेस एपीआई कॉल से सहमत (जो आरईएसटी के मौलिक सिद्धांतों में से एक है!)। हालांकि, अगर आप अपना खुद का कैप्चा रोल कर रहे थे तो कोई कारण नहीं है कि आप कैपेचा छवि यूआरआई के साथ "टोकन" (जैसे उत्तर के एमडी 5 नमकीन हैश) को वापस नहीं कर पाएंगे। फिर अपने मोबाइल एप को एपीआई के साथ सत्यापित करने के लिए उपयोगकर्ताओं को उत्तर भेजकर मूल हैश के साथ प्राप्त करें। –

0

वहाँ, अपने बाकी एपीआई के लिए CSRF बारे में चिंता करने डॉक्स यही कारण है कि बताते हैं इस section जाँच कोई कारण नहीं है।

स्पैम को रोकने का सबसे अच्छा तरीका एक सत्यापित स्रोत, जैसे ओपनआईडी प्रदाता, फेसबुक इत्यादि से उपयोगकर्ता डेटा एकत्र करना है। यदि आप इसे मैन्युअल रूप से करना चाहते हैं, तो इसे करने का सबसे आसान तरीका django-registration और विस्तार करना है बैकएंड में से एक। आप प्रदान किए गए सरल बैकएंड ले सकते हैं और कैप्चा फ़ील्ड के साथ एक कस्टम फॉर्म का उपयोग कर सकते हैं। यह स्वचालित पंजीकरण बुनाई के लिए पर्याप्त होना चाहिए। piston के साथ इसे जोड़ने के लिए पर्याप्त सरल होना चाहिए।

संपादित करें:

आप सही हैं, मैं सिर्फ सवाल फिर से पढ़ें और पाया है मैं पूरी तरह से तथ्य यह है कि आप पहले ही उल्लेख आप दूरस्थ Android/iPhone उपयोगकर्ताओं के खिलाफ अपने REST API का विकास कर रहे हैं की अवहेलना की। इसलिए आपकी एपीआई सार्वजनिक रूप से उजागर होती है और उन अनुरोधों को स्वीकार करती है जो आपके डोमेन से या किसी ब्राउज़र क्लाइंट से उस मामले के लिए उत्पन्न नहीं हो रही हैं।

मैं आपके मामले में पहिया को फिर से नहीं चलाऊंगा, तो आपको Open API Authentication लागू करना चाहिए, क्योंकि यह आपकी आवश्यकताओं के लिए पूरी तरह से लागू होता है: यह जानकर कि आप वास्तविक उपयोगकर्ता के साथ जानकारी का आदान-प्रदान कर रहे हैं, बिना अनुरोध किए कि अनुरोध कहां से आया था।

+0

kRON: मुझे लगता है कि सीएसआरएफ केवल AJAX दाहिनी ओर लागू होता है? आरईएसटी एपीआई के लिए, हमें विशेष रूप से csrf_exempt() का उपयोग करना होगा। कम से कम, जब मैंने django-piston द्वारा प्रदान की गई आरईएसटी एपीआई का उपयोग करके पोस्ट करने का प्रयास किया तो मुझे यही पता चला। –

+0

प्रश्न * नया * उपयोगकर्ता पंजीकृत करने के बारे में है ... तो रजिस्टर एंडपॉइंट सुरक्षित नहीं किया जा सकता है ... यही कारण है कि वह चिंतित है कि इसका दुरुपयोग किया जा सकता है –

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

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