ios - एक आईओएस ऐप में फेसबुक प्रमाणीकरण के लिए डिज़ाइन जो एक सुरक्षित वेब सेवा तक पहुंचता है




ios4 facebook (3)

लक्ष्य: किसी उपयोगकर्ता को आईओएस एप्लिकेशन में फेसबुक के साथ प्रमाणन करने की अनुमति दें जिसके लिए एक सुरक्षित वेब सेवा तक पहुंच की आवश्यकता है जो मैं चला रहा हूं।

धारणाएं: उन उपयोगकर्ताओं के लिए एक मूल प्रमाणीकरण (और पंजीकरण) प्रणाली है जो साइन इन के लिए फेसबुक का उपयोग न करने का विकल्प चुनती है।

विवरण:

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

मुझे आश्चर्य है कि फेसबुक के डेवलपर दस्तावेज में इसके लिए सर्वोत्तम प्रथा नहीं है। सभी मौजूदा दस्तावेज या तो मानते हैं कि आप एक वेबसाइट में एफबी ऑथ का निर्माण कर रहे हैं, या एक स्टैंडअलोन मोबाइल ऐप जिसमें कोई सेवा नहीं है जिसके लिए प्रमाणीकरण की आवश्यकता है।

यहां मेरे शुरुआती विचार हैं कि यह कैसे डिज़ाइन किया जाएगा, लेकिन यह सही है कि यह सही है या नहीं।

  1. क्लाइंट फेसबुक आईओएस लॉगिन पॉप करता है
  2. UI उपयोगकर्ता फेसबुक प्रमाण-पत्रों के साथ साइन इन करता है और पहुंच टोकन प्राप्त करता है
  3. आईओएस ऐप हमारे सर्वर पर पहुंच टोकन पास करता है
  4. हमारा सर्वर एक्सेस टोकन का उपयोग करके एफबी ग्राफ एपीआई से बात करता है (ए) टोकन को मान्य करता है और (बी) उस एक्सेस टोकन के लिए एफबी उपयोगकर्ता आईडी प्राप्त करें।

    उदाहरण के लिए हमारा सर्वर https://graph.facebook.com/me/?access_token=XYZ कॉल करेगा जो JSON ऑब्जेक्ट में प्रोफ़ाइल जानकारी वापस करेगा

  5. मान लें कि यह मान्य है, हमारा सर्वर JSON ऑब्जेक्ट से उपयोगकर्ता आईडी निकालता है और जांच करता है कि उपयोगकर्ता के पास पहले से ही एक खाता है या नहीं। यदि ऐसा है, तो हम उस सत्र के लिए उपयोग करने के लिए ग्राहक को अपना स्वयं का ऑथ टिकट जारी करते हैं। यदि उपयोगकर्ता के पास खाता नहीं है, तो हम फेसबुक उपयोगकर्ता आईडी के साथ एक नया बनाते हैं, अपना खुद का अद्वितीय उपयोगकर्ता आईडी असाइन करते हैं और हमारे ऑथ टिकट जारी करते हैं।

  6. क्लाइंट फिर ऑथ टिकट को बाद के इंटरैक्शन पर पास करता है जिसके लिए प्रमाणीकरण की आवश्यकता होती है।

यह मेरे लिए सही दृष्टिकोण की तरह लगता है लेकिन यह सुनिश्चित नहीं है कि मुझे कुछ बेहद बुनियादी याद आ रही है और गलत (जटिल) पथ नीचे जा रहा है।


आपका समाधान पूरी तरह से काम करता है।

शायद एक विकल्प: क्लाइंट पर प्रारंभिक सामाजिक सेवा अनुरोध से ईमेल क्यों न प्राप्त करें और अपनी वेब सेवा को भेजें? वेब सेवा सिर्फ ईमेल को स्टोर कर सकती है, और शायद एक social_provider भी। मैं समझता हूं कि आपकी वेब सेवा यह सत्यापित करने में सक्षम नहीं होगी कि ईमेल कहां से आया था, लेकिन क्या आपकी वेब सेवा और आपके ग्राहक के बीच कोई उच्च विश्वास संबंध नहीं है? यदि ऐसा है, ऐसा लगता है कि आप सही जगह से आने वाले ईमेल पर निर्भर कर सकते हैं। कृपया कोई मुझे बताएं कि मुझे कौन सी स्पष्ट चीज़ याद आ रही है जो ईमेल-आधारित दृष्टिकोण मूर्खतापूर्ण बनाती है ...


एक समस्या जो मैं इस रणनीति के साथ देख सकता हूं, यह है कि कोई आपको एक अलग फेसबुक ऐप के लिए प्राप्त टोकन एक्सेस कर सकता है। जहां तक ​​मुझे पता है, यह सत्यापित करने का कोई तरीका नहीं है कि एक्सेस टोकन आपके एप्लिकेशन के लिए है, इसलिए आप बस आगे बढ़ेंगे और इसका इस्तेमाल करेंगे।

हालांकि, यह बहुत हानिकारक नहीं लगता है। आम तौर पर लोग / ऐप्स उन्हें साझा करने के बजाए पहुंच टोकन की रक्षा करने का प्रयास करते हैं।

इसका एक संभावित शोषण होगा, किसी के लिए अपनी साइट या मोबाइल ऐप बनाने के लिए, अपने उपयोगकर्ताओं के लिए एक्सेस टोकन प्राप्त करें और अपने एपीआई का उपयोग करके उन्हें प्रमाणीकृत करने का प्रयास करें। यदि यह सफल होता है (उपयोगकर्ता के पास आपकी साइट पर एक फेसबुक खाता है), दुर्भावनापूर्ण साइट उपयोगकर्ता को प्रतिरूपित करने वाले आपके एपीआई का उपयोग करने में सक्षम होगी।

यह एक लंबा शॉट है, लेकिन मुझे लगता है कि यह काम कर सकता है।

संपादित करें: ऐसा लगता है कि एक्सेस टोकन को सत्यापित करने का कोई तरीका है। प्रश्न पर @Danelel द्वारा उत्तर देखें उपयोगकर्ता पहुंच टोकन से एप्लिकेशन आईडी प्राप्त करें (या टोकन के लिए स्रोत एप्लिकेशन सत्यापित करें)


मैंने अभी इस से निपटाया है, और यहां वह हिस्सा है जो मुझे थोड़ा सा करता है:

आपके चरण 5 में ... उपयोगकर्ता के लिए आपके खाते के लिए पंजीकरण करना संभव है, जो आपके फेसबुक आईडी से बिल्कुल अलग है, है ना? फिर कुछ और समय वे फेसबुक के साथ लॉग इन करते हैं .... और आपने अभी उन्हें एक दूसरा खाता बनाया और अपना पहला खो दिया।

अपनी वेब सेवा में लॉग इन करने का एक तरीका होना चाहिए, फिर फेसबुक पर लॉग इन करें, और फेसबुक आईडी और स्थानीय खाते के बीच संबंध कैप्चर करें।

इसके अलावा, आपकी योजना ठोस लगता है।





facebook-graph-api