एंड्रॉइड: स्टोरिंग यूज़रनेम और पासवर्ड?


178

अगर मैं एंड्रॉइड एप्लिकेशन के अंदर उपयोग किए जाने वाले उपयोगकर्ता नाम और पासवर्ड को संग्रहीत करना चाहता हूं, तो इसे करने का सबसे अच्छा तरीका क्या है? क्या यह वरीयताओं के स्क्रीन के माध्यम से है (लेकिन क्या होगा अगर उपयोगकर्ता इसे याद करता है?), या एक संवाद बॉक्स को पॉप अप करें और उपयोगकर्ता को क्रेडेंशियल्स के लिए पूछें? यदि हां, तो मुझे आवेदन के लिए राज्य बनाए रखना होगा। यह मैं कैसे करूंगा?


4
stackoverflow.com/a/786588/1166727 इस बारे में क्या कहना है @RetoMeier (Google पर Android लीड के लिए टेक लीड) की जाँच करें।
टोनी गिल

1
आप credentials.Read इस जवाब स्टोर करने के लिए सबसे सुरक्षित तरीका के लिए देख रहे हैं stackoverflow.com/a/20560574/730807
दुरई Amuthan.H

3
@ कैसे अपनी समस्या को हल करें?
इरूम

@Legend, क्या आप एन्क्रिप्शन के बाद Prefs में बचत pwd पर कुछ प्रकाश फेंक सकते हैं .. क्योंकि मैं चाहता हूं कि मेरा ऐप बिना किसी इंटरनेट के काम करे, फिर मैं कैसे कुंजी प्राप्त करूं .. (coz I cant store key on device)
eRaisedToX8

आप एपी +18 के लिए कीस्टोर का उपयोग कर सकते हैं। डेवलपर
.android.com

जवाबों:


115

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

सलाह ( Android देव गाइड ) से है:

सामान्य तौर पर, हम उपयोगकर्ता क्रेडेंशियल्स के लिए पूछने की आवृत्ति को कम करने की सलाह देते हैं - फ़िशिंग हमलों को अधिक विशिष्ट बनाने के लिए, और सफल होने की कम संभावना है। इसके बजाय एक प्राधिकरण टोकन का उपयोग करें और इसे ताज़ा करें।

जहां संभव हो, उपयोगकर्ता नाम और पासवर्ड डिवाइस पर संग्रहीत नहीं किया जाना चाहिए। इसके बजाय, उपयोगकर्ता द्वारा दिए गए उपयोगकर्ता नाम और पासवर्ड का उपयोग करके प्रारंभिक प्रमाणीकरण करें, और फिर एक अल्पकालिक, सेवा-विशिष्ट प्राधिकरण टोकन का उपयोग करें।

क्रेडेंशियल्स को संग्रहीत करने के लिए अकाउंटमांगर का उपयोग करना सबसे अच्छा विकल्प है। SampleSyncAdapter इसे कैसे उपयोग करने का एक उदाहरण प्रदान करता है।

यदि यह किसी कारण से आपके लिए एक विकल्प नहीं है, तो आप वरीयता तंत्र का उपयोग करके लगातार क्रेडेंशियल्स पर वापस गिर सकते हैं । अन्य एप्लिकेशन आपकी प्राथमिकताओं तक नहीं पहुंच पाएंगे, इसलिए उपयोगकर्ता की जानकारी आसानी से सामने नहीं आती है।


40
मैं कहूंगा कि वरीयताओं के अनुसार पासवर्ड की जानकारी जारी रखना जोखिम भरा है। रूट किए गए फोन पर ऐप की वरीयताओं को एक्सेस करना संभव है। कम से कम आप कर सकते हैं पासवर्ड को बाधित है।
जयेश

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

4
यदि आप AccountManager(मेरे उत्तर के अनुसार, और @ मिगुएल के चक्कर में) का उपयोग करते हैं और किसी को आपके जीएसएम फोन की पकड़ मिलती है, तो उन्हें आपके खातों तक पहुंचने के लिए आपके सिम का उपयोग करने की आवश्यकता होगी, क्योंकि यह संग्रहीत क्रेडेंशियल्स को अमान्य कर देगा। जब सिम बदलता है।
जॉन

3
एसआईपी परिवर्तन पर खाता पोंछने को कुछ समय पहले हटा दिया गया है, क्योंकि यह बहुत कम समझ में आता है, खासकर ऐसे लोगों के लिए जिनके पास एक से अधिक सिम हैं। यदि आपका फ़ोन चुराया जाता है तो बेहतर रणनीति है कि आप अपने Google खाता पृष्ठ पर जाएँ और किसी विशेष उपकरण के लिए पहुँच रद्द करें।
निकोले एलेनकोव

2
"क्रेडेंशियल्स को संग्रहीत करने के लिए AccountManger का उपयोग करना सबसे अच्छा विकल्प है।" क्यों?
ल्यूक

9

आपको Android AccountManager का उपयोग करना चाहिए । यह इस परिदृश्य के लिए उद्देश्य से बनाया गया है। यह थोड़ा बोझिल है, लेकिन सिम कार्ड बदलने पर स्थानीय क्रेडेंशियल्स को अमान्य करने वाली चीजों में से एक है, इसलिए यदि कोई आपके फोन को स्वाइप करता है और इसमें एक नया सिम फेंकता है, तो आपकी साख से समझौता नहीं किया जाएगा।

यह उपयोगकर्ता को डिवाइस पर मौजूद किसी भी खाते के लिए संग्रहीत क्रेडेंशियल्स को एक्सेस करने (और संभावित रूप से हटाने) का त्वरित और आसान तरीका देता है, सभी एक ही स्थान से।

SampleSyncAdapter (@Miguel का उल्लेख किया गया है) एक उदाहरण है जो संग्रहीत खाता क्रेडेंशियल्स का उपयोग करता है।


3
यह कहां प्रलेखित है कि खाता प्रबंधक "स्थानीय क्रेडेंशियल्स को अमान्य कर देगा यदि सिम कार्ड बदलता है"?
एरिक लेविन

ऐसा नहीं है कि मैं इससे अवगत हूं। हालाँकि, यह कुछ ऐसा है जिसे मुझे विश्वास है / स्वीकार / समझने के बाद कि मेरे ऐप के कुछ उपयोगकर्ताओं के पास सिम स्वैप के बाद प्रमाणीकरण समस्याएँ हैं।
जॉन ओ

1
मैं इसे JavaDocs या AccountManager कोड में नहीं देखता। यह एक अच्छी सुविधा की तरह लगता है, बस इसे सत्यापित करना और विवरण समझना अच्छा होगा।
एरिक लेवाइन

2
@NikolayElenkov के अनुसार सिम कार्ड परिवर्तन सुविधा पर अमान्य हटा दिया गया है।
थॉमसडब्ल्यू

2
@ThomasW क्या आपके पास इसके लिए एक प्रशस्ति पत्र है? किसी तरह का निश्चित उत्तर प्राप्त करना बहुत अच्छा होगा।
जॉन ओ

8

मुझे लगता है कि अपनी क्रेडेंशियल को सुरक्षित करने का सबसे अच्छा तरीका यह है कि पहले खाता में एन्क्रिप्शन के साथ पासवर्ड को संग्रहीत करने के बारे में सोचें। डीबी फ़ाइल जो गैर-रूट किए गए डिवाइस में आसानी से उपलब्ध नहीं हो सकती है और रूट किए गए डिवाइस के मामले में हैकर को डिक्रिप्ट करने के लिए कुंजी की आवश्यकता होगी यह।

अन्य विकल्प आपके सभी प्रमाणीकरणों की तरह है जैसे जीमेल कर रहा है। जीमेल सर्वर के साथ पहले प्रमाणीकरण के बाद। आपको वह प्रामाणिक टोकन मिला है जो आपके पासवर्ड के मामले में उपयोग किया जाएगा। यदि आप सर्वर से पासवर्ड बदलते हैं तो टोकन सादे टेक्स्ट में स्टोर किया जाएगा। टोकन टोकन गलत हो सकता है।

अंतिम विकल्प मैं आपको 2-कारक प्रमाणीकरण सक्षम करने और आपके डिवाइस के लिए डिवाइस विशिष्ट पासवर्ड बनाने की सलाह दूंगा। डिवाइस खोने के बाद, आपको केवल उस डिवाइस को अक्षम करना है।


2
क्या आप ऐसा स्रोत पोस्ट कर सकते हैं जो कहता है, कि accounts.db एन्क्रिप्टेड है? या आप कहते हैं कि विशिष्ट पासवर्ड को एन्क्रिप्ट किया जाना चाहिए?
मिशैल के

1
@Riz, जहां एन्क्रिप्शन के लिए कुंजी संग्रहीत करने के लिए तब ... क्योंकि मेरा ऐप इंटरनेट के बिना काम करता है, इसलिए यह नेटवर्क से नहीं मिल सकता है
eRaisedToX

3

एंड्रॉइड एप्लिकेशन में उपयोगकर्ता सेटिंग्स को स्टोर करने के लिए सबसे उपयुक्त तरीका क्या है, इस पर एक नज़र डालें, यदि आप साझा किए गए संदर्भों में स्पष्ट पाठ के रूप में पासवर्ड संग्रहीत करने के बारे में चिंतित हैं।



2

एंड्रॉइड-डेवलपर्स के इस पोस्ट पर एक नज़र डालें, जो आपके एंड्रॉइड ऐप में संग्रहीत डेटा पर सुरक्षा बढ़ाने में मदद कर सकता है।

क्रिप्टोग्राफी का उपयोग क्रेडेंशियल्स को सुरक्षित रूप से स्टोर करने के लिए


2

नए (एंड्रॉइड 6.0) फिंगरप्रिंट हार्डवेयर और एपीआई के साथ आप इसे इस गीथूब नमूना अनुप्रयोग में कर सकते हैं ।


8
संदर्भित नमूना परियोजना एंड्रॉइड की स्टोर में एक कुंजी बनाती है और इसका उपयोग पासवर्ड एन्क्रिप्ट करने के लिए सिफर बनाने के लिए करती है। एन्क्रिप्टेड पासवर्ड और सिफर को साझा वरीयताओं में बेस 64 एन्कोडेड स्ट्रिंग्स के रूप में संग्रहीत किया जाता है। सफल फिंगरप्रिंट प्रमाणीकरण पर, गुप्त कुंजी को एंड्रॉइड की स्टोर से पुनर्प्राप्त किया जाता है और डिकोड किए गए पासवर्ड को डिक्रिप्ट करने के लिए डिकोड किए गए सिफर के साथ उपयोग किया जाता है।
mjwheat

@mjwheat यह समझने में मददगार है कि उदाहरण में क्या चल रहा है। धन्यवाद! एक छोटा टाइपो: "... एन्कोडेड पासवर्ड को डिक्रिप्ट करने के लिए।"
मुएटज़ेनफ्लो

2

आपकी छिपी जानकारी को तोड़ने में कठिनाई के क्रम में इन्हें स्थान दिया गया है ।

  1. क्लियरटेक्स्ट में स्टोर करें

  2. एक सममित कुंजी का उपयोग करके एन्क्रिप्ट किया गया स्टोर

  3. Android Keystore का उपयोग करना

  4. असममित कुंजियों का उपयोग करके एन्क्रिप्ट किया गया स्टोर

source: आपके एंड्रॉइड ऐप में पासवर्ड स्टोर करने के लिए सबसे अच्छी जगह कहां है

Keystore स्वयं उपयोगकर्ता के लॉकस्क्रीन पिन / पासवर्ड का उपयोग करके एन्क्रिप्ट किया गया है, इसलिए, जब डिवाइस स्क्रीन लॉक किया जाता है तो Keystore अनुपलब्ध है। इसे ध्यान में रखें यदि आपके पास एक पृष्ठभूमि सेवा है जिसे आपके एप्लिकेशन रहस्यों तक पहुंचने की आवश्यकता हो सकती है।

स्रोत: पासवर्ड और अन्य संवेदनशील जानकारी संग्रहीत करने के लिए एंड्रॉइड कीस्टोर का सरल उपयोग करें


1

Http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html पर जानकारी एक काफी व्यावहारिक है, लेकिन "उपयोग-छिपी-एंड्रॉइड-एपिस" आधारित दृष्टिकोण है। यह विचार करने के लिए कुछ है जब आप वास्तव में डिवाइस पर स्थानीय रूप से क्रेडेंशियल / पासवर्ड संग्रहीत करने के लिए प्राप्त नहीं कर सकते।

मैंने https://gist.github.com/kbsriram/5503519 पर उस विचार का एक साफ-सुथरा सार तैयार किया है जो सहायक हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.