2013-01-04 15 views
9

मैं अपने आवेदन में प्रमाणीकरण सुविधा जोड़ने की कोशिश कर रहा हूं। प्रमाणीकरण सर्वर लागू करता है oauth 2.0टोकन को कैसे ताज़ा किया जाना चाहिए

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

लेकिन यह मेरे लिए सुरक्षित नहीं है, क्योंकि अगर कोई मेरी फ़ाइल की प्रतिलिपि बनाता है जिसमें किसी अन्य कंप्यूटर को refresh_token है, तो वह मेरे खाते में हैक कर सकता है।

उत्तर

7

आप जो हमले का वर्णन करते हैं उसके साथ आप सही हैं। उद्देश्य के रूप में उपयोग करने के लिए ताज़ा टोकन को सुरक्षित रूप से संग्रहीत किया जाना चाहिए। जैसा कि मैं समझता हूं, आप एक स्टैंडअलोन एप्लिकेशन बना रहे हैं। इसलिए, आप किसी अनधिकृत उपयोगकर्ता द्वारा ताज़ा किए जा रहे रीफ्रेश टोकन को रोकने के लिए फ़ाइल सिस्टम सुरक्षा पर भरोसा कर सकते हैं। आप रीफ्रेश टोकन के लिए भी एन्क्रिप्शन का उपयोग करना चाह सकते हैं, लेकिन कुंजी को आपकी स्थानीय मशीन पर किसी उपयोगकर्ता के सत्र से बाध्य होने की आवश्यकता होगी (अन्यथा, उपयोगकर्ता को एप्लिकेशन के लिए "साइन इन" प्रक्रिया के दौरान इसे प्रदान करने की आवश्यकता होगी ताज़ा टोकन डिक्रिप्ट करने के लिए)। - आप ताज़ा टोकन नहीं बचा जाना चाहिए http://www.ietf.org/mail-archive/web/oauth/current/msg02292.html

+1

कृपया कोड की निम्न पंक्ति वाले अनुभाग के लिए https://developers.google.com/api-client-library/python/guide/aaa_oauth यहां देखें: 'oauth2client.file आयात संग्रहण' से। जब मैंने भंडारण बनाने के लिए उस कोड का उपयोग किया, तो उसने बस एक सादा JSON फ़ाइल बनाई जिसमें सभी जानकारी शामिल थी। इस वर्ग 'oauth2client.file.Storage' के फायदों में से एक यह है कि यह माना जाता है कि यह थ्रेड-सुरक्षित है। हालांकि, यहां कोई एन्क्रिप्शन नहीं किया जा रहा है, इसलिए मैं फटा हुआ हूं। Google "पुस्तकालयों को खराब करने" से बचने के लिए जब भी संभव हो, अपने पुस्तकालयों का उपयोग करने की सिफारिश करता है। हालांकि, भंडारण वर्ग ज्यादा नहीं कर रहा है। विचार? – Leonid

0

आप आपकी चिंता के बारे में सही कर रहे हैं:

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

+3

लेकिन फिर रीफ्रेश टोकन खो जाएगा जब यह स्मृति से बाहर हो जाता है, और उसे उपयोगकर्ता को फिर से आवेदन करने से पहले पहुंच के लिए संकेत देना होगा। –

+0

@ जेसनहॉल ट्रू; उपयोगकर्ता को अपने प्रमाण-पत्रों के लिए पूछने से बचने के लिए, एप्लिकेशन डिज़ाइनर को उपयोगकर्ता की सुरक्षा को खतरे में डाल देना चाहिए (यदि किसी भी तरह से टोकन चोरी हो जाता है)। – OhadR

+1

आप क्रेडेंशियल्स को एन्क्रिप्ट कर सकते हैं या उन्हें अपने सर्वर पर स्टोर कर सकते हैं और एप्लिकेशन शुरू होने पर उन्हें (सुरक्षित रूप से) ला सकते हैं। लेकिन अगर यह व्यवहार्य नहीं है तो हाँ, जब भी ऐप शुरू होता है तो आप अनुमति मांग सकते हैं। –

1

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

यहाँ मेरी दो सेंट है: एक डीबी

  • में अपने टोकन

    1. स्टोर जब भी आप ताज़ा टोकन का उपयोग पहुँच प्राप्त करने के लिए टोकन ताज़ा रीसेट निशानी के रूप में अच्छी तरह से। (OAuth2.0 इस सुविधा है, तो आपको ताज़ा टोकन अपरिवर्तित भी दे सकते हैं, लेकिन यह यह बदल रहा है और डीबी को अद्यतन करने के रखने के लिए सुरक्षा के नजरिए के मामले में बुद्धिमान है)

    आशा यह कुछ जानकारी प्रदान करता !!