2011-02-25 13 views
20

के लिए उपयोगकर्ताओं को प्रमाणीकृत करने के लिए एंड्रॉइड खाता प्रबंधक का उपयोग करना मैं एक एंड्रॉइड एप्लिकेशन लिख रहा हूं जिसमें सर्वर कनेक्शन है। मैं ऐप के उपयोगकर्ता को एंड्रॉइड डिवाइस पर प्रमाणित करना चाहता हूं और सर्वर को यह पता होना चाहिए कि यह किया गया है।सर्वर

उपयोगकर्ता मानते हुए हैं:

  1. गूगल और फेसबुक के लिए एंड्रॉयड डिवाइस में उसकी/उसके साख में प्रवेश किया
  2. आवेदन संग्रहीत उपयोग करने की अनुमति (इन लोगों को मैं वर्तमान में दिलचस्पी रखता हूँ कर रहे हैं) Android डिवाइस पर साख
  3. आवेदन सफलतापूर्वक

मैं चाहूँगा Android के AccountManager से विवरण (खाता उपयोगकर्ता और टोकन) का अधिग्रहण किया अब सही ढंग से और सुरक्षित रूप से सर्वर को पता है कि डिवाइस पर ऐप ने उपयोगकर्ता को प्रमाणित किया है। सर्वर कैसे मान्य कर सकता है कि यह फर्जी नहीं है? क्या उपयोगकर्ता इंटरैक्शन की आवश्यकता के बिना सर्वर पर Google और Facebook के साथ टोकन को सत्यापित करने का कोई तरीका है?

धन्यवाद।

+2

इस पर कोई प्रगति? मैं कुछ इसी तरह देख रहा हूँ। –

+6

वास्तव में नहीं। अभी के लिए मैंने इसके साथ गड़बड़ी स्थगित कर दी है, लेकिन मुझे लगता है कि आपको फोन के खाता प्रबंधक से प्राप्त कुंजी का उपयोग सर्वर पर Google की (या फेसबुक की) सेवाओं के विरुद्ध अपनी प्रामाणिकता को सत्यापित करने के लिए किया जा सकता है, लेकिन मुझे यकीन नहीं है: http: // code। google.com/apis/accounts/docs/OAuth2.html#IA – gnobal

उत्तर

0

हालांकि, आपके पुनर्प्राप्त टोकन का उपयोग करना और इसे सहेजना, या इसे अपने सर्वर पर प्रेषित करना एक अच्छा विचार नहीं हो सकता है, आपके सर्वर को यह जानने के अन्य तरीके हो सकते हैं कि प्रमाणीकरण पूरा हो गया है।

यह एक भरने-सबूत विधि नहीं हो सकता है, लेकिन आपके उपयोग-मामले के आधार पर, यह काम कर सकता है।

  1. खाता प्रबंधक भविष्य इंटरफ़ेस में कॉलबैक है(), जो कहता है कि अब आप अपना टोकन पुनर्प्राप्त कर सकते हैं। इसका मतलब यह है कि प्रमाणीकरण हुआ है, उपयोगकर्ता ने आपके ऐप के लिए एक विशिष्ट खाते का उपयोग करने की अनुमति देने के बाद किया है।

  2. अन्यथा, यदि आप अपने कोड के लिए AccountManagerCallback का उपयोग कर रहे हैं, तो आप कोड के बारे में जान सकते हैं, प्रमाणीकरण हुआ है, खाते के टोकन को पुनर्प्राप्त करने का प्रयास करने के ठीक बाद।

इन मामलों में से किसी एक में, आपको अपने सर्वर पर कॉल करना होगा, यह बताएगा कि प्रमाणीकरण हुआ है। मुझे वास्तव में पता नहीं है कि आपको अपने सर्वर पर टोकन भेजने की आवश्यकता है या नहीं। लेकिन, अगर आप चाहें, मुझे लगता है, आप ऐसा कर सकते हैं।

+0

उत्तर के लिए धन्यवाद, कुमार। हमने जो किया वह एक कस्टम 3-पायदान प्रमाणीकरण था, जहां हम एक छोटे से ऐपइंजिन उदाहरण का उपयोग करते हैं जो हमारे सर्वर ने एक विश्वसनीय चैनल से संवाद किया था। Google I/O 2011 में उन्होंने इसे करने के तरीके के रूप में इसका उल्लेख किया। जहां तक ​​मुझे पता है कि एक समर्थित तरीका नहीं है। – gnobal

+0

@ कुमार मुझे इस बारे में एक संदेह है यदि उपयोगकर्ता डिवाइस पर एक बार प्रमाणीकृत और सिंक करेगा और पीसी के माध्यम से पासवर्ड बदल देगा, तो यह सफलता परिदृश्य भी देगा ?? – pyus13

+0

पुराना टोकन अंततः समाप्त हो जाएगा, और यह उपयोगकर्ता से अपना पासवर्ड अपडेट करने के लिए कहेंगे। तो आपको कुछ भी अतिरिक्त करने की आवश्यकता नहीं होगी। यह खाता प्रबंधक द्वारा स्वचालित रूप से देखभाल की जाएगी। –

0

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

मैं पूरी तरह से है कि आपके के रूप में वर्णन भी चीज से ज्यादा छद्म है पूरा करने के लिए कोशिश कर रहा द्वारा बंद किया जा सकता है, लेकिन मैं इस मदद की

1

आप इस प्रश्न पर एक नज़र रखना चाहिए आशा: Generating Device-Specific Serial Number

आप कर सकते हैं खाता सेवा का उपयोग करता है, की तरह के आधार पर नाम ले:

AccountManager am = AccountManager.get(this); // "this" references the current Context 

Account[] accounts = am.getAccountsByType("com.google"); 

लेकिन आप प्रकट में यह घोषित करना चाहिए और अनुमति मान्य करने के लिए कहें।

+0

धन्यवाद, लेकिन मैं ऐसा करने का एक सुरक्षित तरीका ढूंढ रहा था, और डिवाइस-विशिष्ट आईडी उत्पन्न करने वाला कोई भी समाधान आईडी स्पूफ़िंग के लिए कमजोर है। हम प्रक्रिया में 3-पैर वाले संकेत कर रहे थे। – gnobal

संबंधित मुद्दे