2013-02-14 94 views
8

मैं एक क्रॉस प्लेटफॉर्म मोबाइल एप्लिकेशन (ज़ैमरियन टूल, मोनो टच/मोनोडायड का उपयोग करके) का निर्माण कर रहा हूं। मैं प्रमाणीकरण वर्कफ़्लो के माध्यम से काम करने की कोशिश कर रहा हूं और एक ठोकर खा रहा हूं। मैंने एक स्पष्ट उत्तर के लिए पूरी तरह से खोज की है और अभी तक इसे ढूंढना नहीं है।मोबाइल क्लाइंट से oAuth करने का "दाएं" तरीका

यहां मेरे वर्तमान सेटअप का एक अवलोकन है।

मेरे पास नोडज में निर्मित एक वेबसाइट है। मैं वेब साइट पर oAuth लॉगिन करने के लिए passport.js का उपयोग करता हूं। यह बहुत अच्छा काम करता है, उपयोगकर्ता ट्विटर या फेसबुक का उपयोग करके मेरी साइट पर लॉगिन कर सकते हैं।

अब मैं अपने मोबाइल क्लाइंट में यह लॉगिन लॉगिन कार्यक्षमता विस्तारित करना चाहता हूं।

मैं देख रहा हूँ 2 विकल्प

  1. एम्बेड ऐप्लिकेशन आईडी और एप्लिकेशन गुप्त मोबाइल ग्राहकों में है और प्रत्यक्ष oAuth FB करने के लिए कॉल कर सकते हैं या ट्विटर

  2. प्रॉक्सी oAuth के माध्यम से कॉल मोबाइल एप्लिकेशन से मेरी मौजूदा NodeJS वेब सर्वर

विकल्प 2 पसंदीदा तरीका (होने के लिए के रूप में यह करने के लिए "जहाज" होने से बचा जाता है प्रतीत होता है (सर्वर पर गुप्त कुंजी रखने) secre मोबाइल ऐप में टी)।

मेरे पास प्रॉक्सी दृष्टिकोण अधिकतर काम कर रहा है।

  1. मैं अपने मोबाइल क्लाइंट में एक WebView खोलने के लिए और http://mysever/auth/twitter
  2. यह चलाता है पर यह बात अपने मौजूदा passport.js कोड के माध्यम से और ट्विटर प्रवेश पृष्ठ पर मोबाइल WebView से अधिक पुनर्निर्देश।
  3. उपयोगकर्ता तब डिवाइस पर ट्विटर वेबपृष्ठ पर अपने क्रेडिट दर्ज करता है।
  4. ट्विटर फिर मेरे ओथ कॉलबैक यूआरएल (जो मेरा नोडजेस वेब सर्वर है) को कॉल करता है।
  5. मेरा सर्वर और ट्विटर उपयोगकर्ता प्रोफाइल जानकारी प्राप्त करने के चौथे हैंडशेक को पीछे रखता है (जैसा कि मैं इसे समझता हूं, यह इस दृष्टिकोण की कुंजी है, मेरा सर्वर और ट्विटर हैंडशेक को संभालने के लिए, मोबाइल क्लाइंट को नहीं करना है कुछ भी करने या इस प्रक्रिया)

यहाँ मेरी समस्या है के दौरान किसी भी टोकन पारित:

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

    मैं WebView नियंत्रण हड़पने के लिए में किसी भी तरह से समझ नहीं प्रतिक्रिया वस्तु और एक कुकी, या हेडर मान (उदाहरण के लिए) पकड़ो (यह एंड्रॉइड और आईओएस के लिए सच लगता है)। मुझे नहीं लगता कि यह मंच विशिष्ट है। मुझे लगता है कि मैं कुछ ऐसा करने की कोशिश कर रहा हूं कि मोबाइल प्लेटफार्मों में एक वेबव्यू विजेट बस suport नहीं है। यह मुझे लगता है कि मुझे कुछ याद आ रही है।

केवल एक चीज मैं पता लगा है मेरे वेब सर्वर "redirect" एक नकली यूआरएल क्वेरी स्ट्रिंग में उपयोगकर्ता जानकारी है कि करने के लिए मोबाइल ग्राहक ब्राउज़र है। Myapp की तरह कुछ: // info? Userid = 1234

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

यह कई कारणों से बड़े पैमाने पर क्लिगी है। इनमें से सबसे बड़ा यह है कि यूआरएल तार को अनएन्क्रिप्टेड तार पर भेजा जाता है और इसमें सभी डेटा सादे पाठ में होते हैं।

वेब सर्वर से डेटा को मोबाइल क्लाइंट पर वापस लाने का बेहतर तरीका होना चाहिए?

या क्या मैं यह सब गलत कर रहा हूं?

+0

क्या दृष्टिकोण आप अंततः तय किया था के साथ काम कर रहे हैं? मैं आपके विकल्प 2 आदर्शवादी दृष्टिकोण के साथ एक ही दुविधा में फंस गया हूं। –

+0

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

+0

कोई और सिर्फ ओएथ की तरह महसूस कर रहा है व्याख्या और आधा arsed कार्यान्वयन की एक पूरी गड़बड़ है? – Jammer

उत्तर

3

आईओएस और एंड्रॉइड दोनों के लिए एक्समारिन के लिए ओथ को लागू करने का सबसे सरल तरीका Xamarin.Auth का उपयोग कर रहा है। क्लाइंट के लिए स्टार्टर दस्तावेज़ here है। मुझे लगता है कि इसे सब कुछ सुरक्षित रूप से बनाए रखना चाहिए और आपको प्रॉक्सी के रूप में अपने नोड सर्वर का उपयोग करने के बारे में चिंता करने की आवश्यकता नहीं होगी।

आपको कॉल के हिस्से के रूप में अपनी एप्लिकेशन आईडी प्रदान करने की आवश्यकता होगी, लेकिन मेरे पास चिंता करने के लिए बहुत अधिक या कोई सुरक्षा समस्या नहीं है।

मुझे पता है कि यह आपके द्वारा पहले से लागू किए गए कार्यों के खिलाफ जा रहा है, लेकिन शायद यह चीजों को थोड़ा सा सरल बनाने में मदद कर सकता है।

+0

दिलचस्प, मैंने इस पुस्तकालय को नहीं देखा था। लिंक के लिए धन्यवाद। ऐसा लगता है कि यह मूल रूप से वही बात है जो RestSharp प्रदान करता है (जो प्रभावी रूप से मेरा विकल्प 1 है)। OAuth1 (ट्विटर) के लिए मुझे लगता है कि इसका मतलब है कि मुझे अपना ऐप गुप्त मोबाइल परिनियोजन पैकेज में एम्बेड करना होगा? –

+1

आह, हाँ, रेस्टशर्प की एक ही ओएथ कार्यक्षमता है। OAuth1 के लिए, बहुत सारे विकल्प नहीं हैं। या तो, प्रॉक्सी के लिए एम्बेड या जाएं, जैसे आपने शुरू किया था। यदि आप एम्बेड करते हैं, तो आप चाबियों को खराब कर सकते हैं या उन्हें सुरक्षित स्थान पर स्टोर करने का प्रयास कर सकते हैं, लेकिन इस बात की कोई गारंटी नहीं है कि वे चोरी नहीं होंगे। मुझे लगता है कि यह पोस्ट इस विषय पर काफी अच्छा अवलोकन है: http://stackoverflow.com/questions/1934187/oauth-secrets-in- मोबाइल-apps। –

+0

हाँ मैंने उस धागे को पढ़ा। लेकिन वास्तव में कोई समाधान नहीं दिया गया है। यह कहने के अलावा कि क्लाइंट अनुप्रयोगों के लिए ओथ सही समाधान नहीं है। मैं और अधिक सोच रहा हूं कि ओएथ पर पेंट करना मोबाइल ऐप्स –

0

यह वही दुविधा है जिसका मैं सामना कर रहा हूं। इस प्रकार मैं वर्तमान में इसके साथ सौदा करता हूं। मेरे ऐप में ग्राहक सीधे या किसी अन्य सेवा के माध्यम से आ सकता है जैसे फेसबुक जो मेरा मुख्य है और इसलिए जिस पर मैंने ध्यान केंद्रित किया है।

फेसबुक या तो POST (डेस्क ऐप्स) या एक GET (मोबाइल) के माध्यम से रीडायरेक्ट कर सकता है।

मैं प्रारंभिक अनुरोध की जांच करता हूं ताकि देखें कि सेवा पहचानकर्ता है या नहीं - उदाहरण के लिए फेसबुक जीईटी है।

app.get('/', function(req, res) { 
var paraUrl = URL.parse(req.url,true).query; 
//The fb_source is shown - 
//i need to go striaght to the facebook authorization since 
//its coming from 
//from a mobile device. 
if (paraUrl.fb_source){ 
res.redirect('/auth/facebook'); //this is the passport part 
return; 
} 
res.sendfile('index.html'); 
} 

फेसबुक पोस्ट बेस 64url में टोकन एन्कोड तक पहुंचने में थोड़ा अलग है। जीईटी आपको एक कोड देता है जिसे आप एक्सेस टोकन के लिए एक्सचेंज कर सकते हैं लेकिन मुझे इसके साथ समस्याएं थीं और पासपोर्ट सिस्टम में बसने का विकल्प चुना था।

यदि कोई ग्राहक सीधे आता है तो मैं सत्र या एन्क्रिप्टेड कुकी की जांच करता हूं जो स्थानीय रणनीति में संबंध रखता है। यह तब एक एक्सेस टोकन के लिए डीबी की जांच करता है जो उदाहरण के लिए फेसबुक एपीआई तक पहुंचने के लिए उपयोग किया जा सकता है।

एक ग्राहक गैर मान्यता प्राप्त है, तो वे फेसबुक के माध्यम से प्रमाणित करने के लिए विकल्प दिया जाता है, गूगल आदि

मुख्य बात यह है कि जानकारी का केवल 2 टुकड़े ग्राहक, पासपोर्ट सत्र id और मेरे एप्लिकेशन को उपयोगकर्ता के साथ जमा हो जाती है है आईडी

कनेक्ट करें।sid - encypted कुकी

userId - encypted कुकी

मैं पता लगाने के लिए दिलचस्पी होगी कैसे अन्य लोगों को इस मुद्दे

+0

आप connect.sid और userid को मोबाइल एप्लिकेशन पर वापस कैसे प्राप्त कर रहे हैं? क्या आप किसी भी तरह मोबाइल ब्राउज़र से प्रतिक्रिया ऑब्जेक्ट को पकड़ने में सक्षम हैं? –

+0

ये एन्क्रिप्टेड कुकीज़ का उपयोग कर सेट हैं ताकि वे प्रत्येक अनुरोध के लिए वापस आ जाए। Connect.sid ऐप की लंबाई के लिए केवल अच्छा है, लेकिन मैंने अपनी उपयोगकर्ता आईडी को दो सप्ताह के लिए जीवित रहने के लिए सेट किया है –

+0

तो क्या आप कुकी जार ऑब्जेक्ट पर पहुंचने और ब्राउज़र विजेट (वेबव्यू) से एन्क्रिप्टेड कुकी खींचने में सक्षम हैं या क्या आप अपने मोबाइल क्लाइंट की अवधि के लिए ब्राउज़र संदर्भ में रह रहे हैं? –