लक्ष्य: एक उपयोगकर्ता को फेसबुक के साथ एक iOS एप्लिकेशन में प्रमाणीकरण करने की अनुमति दें, जिसे संरक्षित वेब सेवा तक पहुंच की आवश्यकता होती है जो मैं चला रहा हूं।
मान्यताओं: उन उपयोगकर्ताओं के लिए एक देशी प्रमाणीकरण (और पंजीकरण) प्रणाली है जो साइन इन के लिए फेसबुक का उपयोग नहीं करने का विकल्प चुनते हैं।
विवरण:
- मान लें कि हम अपने सिस्टम के लिए एक अलग खाता / क्रेडेंशियल बनाए बिना उपयोगकर्ता के लिए फेसबुक के साथ साइन इन करने का विकल्प प्रदान करना चाहते हैं।
- क्योंकि हम अपने स्वयं के मूल निवासी तंत्र (उपयोगकर्ता नाम और पासवर्ड) का समर्थन करते हैं, हमारे पास अपनी स्वयं की उपयोगकर्ता आईडी है और एक प्रमाणीकरण टोकन जारी करते हैं जो प्रारंभिक क्रेडेंशियल सत्यापन के बाद बाद के इंटरैक्शन के लिए उपयोग किया जाता है।
मुझे आश्चर्य है कि फेसबुक के पास इसके डेवलपर प्रलेखन में सर्वोत्तम अभ्यास नहीं हैं। सभी मौजूदा दस्तावेज़ या तो यह मान रहे हैं कि आप किसी वेबसाइट में FB को बना रहे हैं, या एक स्टैंडअलोन मोबाइल ऐप है जिसमें बिना किसी सेवा के प्रमाणीकरण की आवश्यकता होती है।
यहां मेरे प्रारंभिक विचार हैं कि यह कैसे डिज़ाइन किया जाएगा लेकिन क्या यह सही है, इस पर सत्यापन चाहते हैं।
- क्लाइंट फेसबुक आईओएस लॉगिन को पॉप करता है
- यूआई उपयोगकर्ता फेसबुक क्रेडेंशियल्स के साथ साइन इन करता है और एक्सेस टोकन प्राप्त करता है
- आईओएस ऐप हमारे सर्वर तक पहुंच टोकन पास करता है
हमारा सर्वर FB ग्राफ़ एपीआई से टोकन की पहुँच का उपयोग करके (a) टोकन को मान्य करता है और (b) उस एक्सेस टोकन के लिए FB उपयोगकर्ता आईडी प्राप्त करता है।
उदा। हमारा सर्वर https://graph.facebook.com/me/?access_token=XYZ पर कॉल करेगा जो एक JSON ऑब्जेक्ट में प्रोफ़ाइल जानकारी लौटाएगा
यह मान्य है, हमारा सर्वर JSON ऑब्जेक्ट से उपयोगकर्ता आईडी निकालता है और जांचता है कि उपयोगकर्ता के पास पहले से ही खाता है या नहीं। यदि हां, तो हम उस सत्र के लिए उपयोग करने के लिए क्लाइंट को अपना स्वयं का टिकट जारी करते हैं। यदि उपयोगकर्ता के पास कोई खाता नहीं है, तो हम फेसबुक यूजर आईडी के साथ एक नया बनाते हैं, अपना खुद का यूनीक यूजरआईडी असाइन करते हैं और अपना ओटोमेटिक टिकट जारी करते हैं।
- इसके बाद क्लाइंट को बाद के इंटरैक्शन पर ऑर्टिकल टिकट वापस करना पड़ता है, जिसे प्रमाणीकरण की आवश्यकता होती है।
यह मेरे लिए सही दृष्टिकोण की तरह लगता है लेकिन निश्चित नहीं है कि अगर मैं कुछ बुनियादी रूप से याद कर रहा हूं और गलत (जटिल) रास्ते पर जा रहा हूं।