मैं Django रेस्ट फ्रेमवर्क का उपयोग कर एक एपीआई बना रहा हूं। बाद में इस एपीआई को आईओएस और एंड्रॉइड डिवाइसों द्वारा उपभोग किया जाना चाहिए। मैं अपने उपयोगकर्ताओं को फेसबुक और Google जैसे ओथ 2-प्रदाताओं के साथ साइन-अप करने की अनुमति देना चाहता हूं। इस मामले में, उन्हें अपने मंच के साथ एक खाता बनाना नहीं चाहिए। लेकिन उपयोगकर्ताओं को फेसबुक/Google खाता नहीं होने पर साइन-अप करने में भी सक्षम होना चाहिए, जिसके लिए मैं django-oauth-toolkit का उपयोग कर रहा हूं, इसलिए मेरे पास अपना स्वयं का oauth2-प्रदाता है।मैं पाइथन सोशल ऑथ के साथ Django OAuth Toolkit का उपयोग कैसे कर सकता हूं?
बाहरी प्रदाताओं के लिए मैं पाइथन-सोशल-ऑथ का उपयोग कर रहा हूं, जो ठीक काम करता है और स्वचालित रूप से उपयोगकर्ता ऑब्जेक्ट बनाता है।
मैं चाहता हूं कि ग्राहक बीयर टोकन का उपयोग करके प्रमाणीकृत करें, जो मेरे प्रदाता के साथ साइन अप करने वाले उपयोगकर्ताओं के लिए ठीक काम करता है (django-oauth-toolkit प्रमाणीकरण योजना और Django REST Framework के लिए अनुमति कक्षाएं प्रदान करता है)।
हालांकि, पायथन-सोशल-ऑथ केवल सत्र आधारित प्रमाणीकरण लागू करता है, इसलिए बाह्य oauth2 प्रदाता द्वारा पंजीकृत उपयोगकर्ताओं की ओर से प्रमाणित API अनुरोध करने का कोई सीधा तरीका नहीं है।
अगर मैं एक ACCESS_TOKEN कि Django-OAuth-टूलकिट द्वारा उत्पन्न किया गया है, एक अनुरोध कर रही है इस तरह से काम करता है का उपयोग करें:
curl -v -H "Authorization: Bearer <token_generated_by_django-oauth-toolkit>" http://localhost:8000/api/
हालांकि, निम्नलिखित काम नहीं करता है के बाद से वहाँ के लिए कोई इसी प्रमाणीकरण योजना है Django बाकी फ्रेमवर्क और सत्र-आधारित प्रमाणीकरण के लिए अजगर-सामाजिक लेखन केवल काम द्वारा प्रदान की AUTHENTICATION_BACKENDS:
curl -v -H "Authorization: Bearer <token_stored_by_python-social-auth>" http://localhost:8000/api/
अजगर-सामाजिक लेखन को प्रमाणित करने के बाद Django बाकी फ्रेमवर्क द्वारा प्रदान की ब्राउज़ करने योग्य API का उपयोग करके बस काम करता है ठीक है, सत्र कुकी के बिना केवल एपीआई कॉल काम नहीं करते हैं।
मुझे आश्चर्य है कि इस समस्या के लिए सबसे अच्छा तरीका क्या है। जिस तरह से मैं इसे देखता हूं, मेरे पास मूल रूप से दो विकल्प हैं:
ए: जब कोई उपयोगकर्ता बाहरी oauth2 प्रदाता (पायथन-सोशल-एथ द्वारा नियंत्रित) के साथ साइन अप करता है, तो oauth2_provider.models बनाने के लिए प्रक्रिया में हुक करें। एक्सेस टोकन और 'oauth2_provider.ext.rest_framework.OAuth2Authentication'
का उपयोग करना जारी रखें, अब बाहरी प्रदाता के साथ पंजीकृत उपयोगकर्ताओं को प्रमाणित करना। इस दृष्टिकोण का सुझाव यहां दिया गया है: https://groups.google.com/d/msg/django-rest-framework/ACKx1kY7kZM/YPWFA2DP9LwJ
बी: एपीआई अनुरोध प्रमाणीकरण के लिए पायथन-सोशल-ऑथ का उपयोग करें। मैं अपने स्वयं के उपयोगकर्ताओं को एक कस्टम बैकएंड लिखकर और register_by_access_token का उपयोग करके पाइथन-सोशल-ऑथ में प्राप्त कर सकता हूं। हालांकि, चूंकि एपीआई कॉल Django सत्रों का उपयोग नहीं कर सकते हैं, इसका मतलब यह होगा कि मुझे Django Rest Framework के लिए प्रमाणीकरण योजना लिखनी होगी जो पायथन-सोशल-ऑथ द्वारा संग्रहीत डेटा का उपयोग करती है। ऐसा करने के तरीके पर कुछ संकेत यहां पाया जा सकता:
http://psa.matiasaguirre.net/docs/use_cases.html#signup-by-oauth-access-token
http://blog.wizer.fr/2013/11/angularjs-facebook-with-a-django-rest-api/
http://cbdev.blogspot.it/2014/02/facebook-login-with-angularjs-django.html
हालांकि, जिस तरह से मैं समझता हूँ कि यह अजगर-सामाजिक लेखन केवल जब एक लॉगिन कर टोकन पुष्टि करता है और Django सत्र पर निर्भर करता है बाद में। इसका मतलब यह होगा कि मुझे पाइथन-सोशल-एथ को प्रत्येक स्टेटलेस एपीआई अनुरोध के लिए पूरे ओथ 2-प्रवाह करने से रोकने और डीबी में संग्रहीत डेटा के खिलाफ जांच करने के लिए एक रास्ता खोजना होगा, जिसे वास्तव में पूछताछ के लिए अनुकूलित नहीं किया गया है जेएसओएन के रूप में संग्रहीत (मैं UserSocialAuth.objects.get (extra_data__contains =) का उपयोग कर सकता हूं)।
मुझे एक्सेस टोकन के दायरे को सत्यापित करने और उन्हें अनुमतियों की जांच करने के लिए भी उपयोग करना होगा, कुछ django-oauth-toolkit पहले से ही करता है (TokenHasScope
, required_scopes
आदि)।
फिलहाल, मैं विकल्प ए का उपयोग करने की ओर झुका रहा हूं, क्योंकि django-oauth-toolkit Django Rest Framework के साथ अच्छा एकीकरण प्रदान करता है और मुझे बॉक्स से बाहर की हर चीज मिलती है। एकमात्र कमी यह है कि मुझे अजगर-ओथ-टूलकिट के एक्सेसटोकन मॉडल में पाइथन-सोशल-ऑथ द्वारा पुनर्प्राप्त access_tokens को "इंजेक्ट" करना है, जो कि किसी भी तरह गलत लगता है, लेकिन शायद सबसे आसान तरीका होगा।
क्या किसी को ऐसा करने पर कोई आपत्ति है या शायद एक ही समस्या से अलग समस्या का सामना कर सकता है? क्या मुझे कुछ स्पष्ट याद आ रहा है और मेरी ज़िंदगी ज़रूरी ज़रूरी है? अगर किसी ने पहले ही पाइथन-सोशल-ऑथ और बाहरी ओथ 2 प्रदाताओं के साथ django-oauth-toolkit को एकीकृत किया है, तो मैं कुछ पॉइंटर्स या राय के लिए बहुत आभारी हूं।
हाय केविन, आपके उत्तर के लिए बहुत बहुत धन्यवाद। मैंने शायद इसे पर्याप्त स्पष्ट नहीं किया है, लेकिन मैं जो करना चाहता हूं वह है कि मेरे उपयोगकर्ताओं को फेसबुक या Google जैसे प्रदाताओं का उपयोग करके साइन-अप करने की क्षमता प्रदान करें, जैसे स्टैक ओवरफ्लो करता है। मैं इन प्रदाताओं से कोई अन्य जानकारी प्राप्त नहीं करना चाहता हूं, केवल उपयोगकर्ताओं को उनके साथ लॉगिन करने की अनुमति देता हूं। अगर वे उदा। Google, उन्हें मेरे प्रदाता के साथ पंजीकरण करने की आवश्यकता नहीं है। प्रॉक्सी की तरह django-oauth-toolkit का उपयोग करने के लिए आपका सुझाव बहुत समझ में आता है, मुझे इसे सोचने की ज़रूरत है और बाद में आपसे मिल जाएगी। – jeverling
केवल एक एपीआई है और django-oauth-toolkit को साइन-अप करने के लिए अलग-अलग विकल्पों में से एक माना जाता है, हां। मैंने केवल साइन-अप के लिए बाहरी प्रदाताओं की पेशकश करने के बारे में सोचा था, लेकिन उन उपयोगकर्ताओं को पसंद करेंगे जिनके पास Google या Facebook के साथ कोई खाता नहीं है या आप साइन-अप करने के लिए इसे अपने प्लेटफॉर्म से संबद्ध नहीं करना चाहते हैं। – jeverling
यह काम करना चाहिए, लेकिन इस मामले में मुझे अभी भी समस्या है कि एपीआई कॉल कैसे करें उदाहरण के साथ एक कुकी-जार की तरह कुछ उपयोग किए बिना एक आईओएस ऐप। Django-oauth-toolkit के साथ मैं सिर्फ एक भालू टोकन के साथ प्राधिकरण शीर्षलेख का उपयोग कर सकता हूं, जो अभी 'पायथन-सोशल-ऑथ' के साथ संभव नहीं लगता है। – jeverling