2013-01-22 35 views
19

के साथ सुरक्षित फेसबुक प्रमाणीकरण प्रदान करें मैं एक छोटा मोबाइल ऐप (एंड्रॉइड और आईओएस) और एक आरईएसटी एपीआई के साथ थोड़ा बैकएंड सर्वर बनाना चाहता हूं।मेरे सर्वर

मेरे ऐप उपयोगकर्ता (एंड्रॉइड या आईओएस) को फेसबुक पर लॉगिन करने की आवश्यकता है। मैं फेसबुक्स मोबाइल एसडीके का उपयोग कर ऐसा करता हूं। जब लॉगिन सफल हो गया है, तो फेसबुक एसडीके प्रमाणीकरण लौटाएगा, जो अब उपयोगकर्ताओं के स्मार्टफोन पर है।

विचार निम्नानुसार है: जब भी मेरे ऐप को कुछ डेटा चाहिए, तो ऐप HTTPS पर मेरे सर्वर बैकएंड (आरईएसटी) से संपर्क करेगा। उदाहरण के लिए: ऐप एक साधारण HTTP प्राप्त करता है और पुनर्प्राप्त फेसबुक प्रमाणीकरण टोकन पास करता है। मेरा सर्वर यह फेसबुक प्रमाणीकरण प्राप्त करता है टोकन और यह टोकन का उपयोग निर्धारित करने के लिए करें, यदि उपयोगकर्ता प्रमाणित है और फेसबुक प्रोफ़ाइल जानकारी (प्रथम नाम, अंतिम नाम इत्यादि) पुनर्प्राप्त करने के लिए है। तो सर्वर भी फेसबुक से संपर्क करता है और HTTP GET अनुरोध के लिए व्यक्तिगत प्रतिक्रिया उत्पन्न करता है।

मेरे प्रश्न हैं:

  1. यह सर्वर सही जुड़े फेसबुक उपयोगकर्ता को पुनः प्राप्त करने के लिए वास्तव में प्रत्येक REST API कॉल के लिए इस facebookAuthentication टोकन पारित करने के लिए पर्याप्त है?
  2. मैं HTTPS का उपयोग करता हूं, इसलिए मुझे लगता है कि कनेक्शन पर्याप्त एन्क्रिप्ट किया गया है, है ना?
  3. मुझे लगता है कि मुझे कुछ हस्ताक्षर तंत्र की आवश्यकता है ताकि प्रत्येक आरईएसटी एपीआई कॉल (एचटीटीपीएस पर) पर हस्ताक्षर किए ताकि यह सुनिश्चित किया जा सके कि फेसबुक प्रमाणीकरण टोकन केवल मेरे मोबाइल ऐप से भेजा गया है। मैं किसी भी आरईएसटी एपीआई कॉल पर हस्ताक्षर करने के लिए एसएचए -1 के साथ आरएसए का उपयोग करके ऐसा करूँगा। लेकिन इस दृष्टिकोण के साथ समस्या यह है कि ग्राहक को ऐप में (कहीं भी हस्ताक्षर करने के लिए) निजी कुंजी स्टोर करने की आवश्यकता होती है और सर्वर सार्वजनिक कुंजी (हस्ताक्षर मिलान के लिए) जानता है। क्या ये सही है? यदि हां, तो मुझे लगता है कि यह एक बड़ी सुरक्षा समस्या है, क्योंकि एक मोबाइल ऐप (विशेष रूप से एंड्रॉइड) को निजी कुंजी प्राप्त करने के लिए डिकंपिल्ड किया जा सकता है। मैं अपने ऐप में सुरक्षित रूप से इस निजी कुंजी को कैसे स्टोर करूं? क्या हस्ताक्षर करने के लिए कोई और व्यवस्था है कि आप सिफारिश कर सकते हैं?

बीटी: क्या आप आईओएस और एंड्रॉइड के लिए एक अच्छा आरएसए मुक्ति जानते हैं?

उत्तर

8

1) हां। बहुत हो गया। यदि आपके क्लाइंट (मोबाइल ऐप) में टोकन है, तो यह साबित करता है कि एक उपयोगकर्ता फेसबुक को प्रमाणित करता है। तो, आपने इस तरह एक उपयोगकर्ता को प्रमाणित किया है। हालांकि, मोबाइल ऐप को प्रमाणीकृत करने के लिए पर्याप्त नहीं है (इसके बारे में, मैं # 3 में बात करूंगा)।

2) हां। यह दोनों तरीकों से एन्क्रिप्ट किया गया है।

3) यह कठिन है। इसे दूरस्थ प्रमाणन कहा जाता है। इसके साथ बहुत सी समस्याएं हैं।

इससे पहले कि आप इस दिशा में जाते हैं, आप अपने आप को दो सवाल

  • कौन आप के खिलाफ की रक्षा कर रहे पूछने की आवश्यकता?

  • मैं कितना निवेश करना चाहता हूं?

आप बहुत सीमित ज्ञान है, जो आपके सर्वर का उपयोग करेगा एक अन्य मोबाइल ऐप लिख सकते हैं के साथ एक छात्र के खिलाफ अपने आप को रक्षा कर रहे हैं, तो आप एक हस्ताक्षर के साथ ठीक कर रहे हैं।

यदि आप केवल थोड़ी अधिक परिष्कृत सॉफ्टवेयर इंजीनियर (जो आपके आवेदन को इंजीनियर कर सकते हैं) के खिलाफ सुरक्षा कर रहे हैं - यह पर्याप्त नहीं होगा। यह इंजीनियर आपके आवेदन से एक निजी कुंजी निकाल सकता है और उसके आवेदन में अनुरोधों पर हस्ताक्षर करने के लिए इसका उपयोग कर सकता है।

आप रिमोट प्रमाणन here और here के बारे में पढ़ सकते हैं।

समाधान जो आपको सरल रिवर्स इंजीनियरिंग से बचा सकते हैं, काफी जटिल हैं।

पीएस आरएसए पुस्तकालय के बारे में। Android के लिए इस पर

देखो:

Asymmetric Crypto on Android

आईओएस

के लिए

और यह

RSA Encryption using public key