2013-01-05 13 views
5

मैंने अभी हमारे बॉक्स कोड को OAuth2 में अपग्रेड किया है।OAuth2 रीफ्रेश टोकन केवल 14 दिनों के लिए मान्य

हमने कोड लागू किया है जो उपयोगकर्ताओं को हमारे वेब सर्वर और उनके बॉक्स (साथ ही स्काईडाइव, ड्रॉपबॉक्स, Google ड्राइव) खातों के बीच फ़ाइलों को स्थानांतरित करने की अनुमति देता है। उपयोगकर्ताओं के उपयोग और ताज़ा टोकन हमारे डेटाबेस सर्वर में संग्रहीत हैं।

प्रति http://developers.box.com/oauth/ रूप में, यह कहना है प्रत्येक ताज़ा टोकन 60 दिनों

दोनों SkyDrive और ड्राइव OAuth2 का उपयोग के लिए मान्य है, और ताज़ा टोकन समाप्ति नहीं है। क्या गैर-समाप्ति रीफ्रेश टोकन होना संभव है?

कुछ अनुप्रयोगों को रीफ्रेश टोकन की आवश्यकता नहीं हो सकती है, तो क्या आप नए OAuth2 स्कोप पेश करने पर विचार करेंगे, उदा।

  1. box.read
  2. box.read_write
  3. box.offline_access

उत्तर

14

मैं यह समझ के रूप में, बॉक्स OAuth2 कार्यान्वयन वैकल्पिक ताज़ा टोकन रोटेशन योजना का प्रयोग करता है, जहां प्रत्येक बार जब कोई एक्सेस टोकन जारी किया गया है, एक नया ताज़ा टोकन भी जारी किया गया है। oauth spec document की धारा 10.4 देखें। यह एक वैकल्पिक सुविधा है, और एक ऐसा है जो Google और माइक्रोसॉफ्ट नियोजित नहीं करता है, क्योंकि वे OAuth2 कार्यान्वयन के लिए स्थायी रीफ्रेश टोकन जारी करते हैं (या कम से कम लंबे जीवनकाल के साथ टोकन रीफ्रेश करें, इसलिए यह वास्तव में कोई समस्या नहीं है)।

यह मेरी विनम्र राय में, बॉक्स के हिस्से पर एक बहुत ही दुर्भाग्यपूर्ण विकल्प है।

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

इसके साथ मेरी समस्या है, तो आप प्रत्येक अनुरोध पर ताज़ा टोकन को बचाने के लिए है, लेकिन क्या है कि यदि किसी कारण से विफल रहता है कि: THE किसी नेटवर्क की त्रुटि है, बैटरी flatlines, वहाँ एक डिस्क लिखने अपवाद, अपने अनुप्रयोग है ओएस द्वारा बंद हो जाता है .... तो आपको अनुरोध करना होगा कि उपयोगकर्ता फिर से लॉग इन करेगा, और उपयोगकर्ता ऐप डेवलपर को दोषी ठहराएगा।

और ऐसा होने जा रहा है, यदि आपके पास अपने ऐप का उपयोग करने वाले पर्याप्त उपयोगकर्ता हैं। शायद समय के साथ केवल 2-5% के लिए, लेकिन यह अभी भी मेरी राय में बड़ी समस्या है।

कम से कम अगर रीफ्रेश टोकन (अर्द्ध)-स्थायी था, तो आप इसे पूरा होने तक ऑथ प्रक्रिया को पुनः प्रयास कर सकते थे। तब आप जानते थे कि आपके पास टोकन सहेजा गया था, और आप उपरोक्त परिदृश्य होने पर, रीट्रीज़ के लिए भी इसका उपयोग जारी रख सकते थे, लेकिन रोटेशन योजना के साथ नहीं।

मैं पहले से ही अपने उपयोगकर्ताओं के लिए मानक समर्थन ईमेल बनाने की सोच रहा हूं जो इस समस्या का सामना करते हुए इस समस्या का अनुभव करते हैं।

+0

मैं पहले से ही प्रत्येक अनुरोध पर नया ताज़ा टोकन सहेज रहा हूं। – MikeLim

+1

यह एक वेब ऐप है और टोकन हमारे डेटाबेस सर्वर में संग्रहीत हैं, इसलिए आउटेज का जोखिम थोड़ा कम है। मैं रीफ्रेश टोकन रोटेशन योजना के साथ ठीक हूं; यह थोड़ा और सुरक्षित है। हालांकि, मैं लंबे समय तक पर्याप्त जीवनकाल के साथ टोकन ताज़ा करना पसंद करूंगा। – MikeLim

+0

मुझे भी, लेकिन मुझे उम्मीद है कि मेरा जवाब अभी भी आपके लिए उपयोगी था। मैं प्रत्येक अनुरोध पर डेटाबेस में अनुरोध टोकन भी संग्रहीत करता हूं, लेकिन मोबाइल डिवाइस पर, और मेरे अनुभव में ऐसी कई चीजें हैं जो उन पर गलत हो सकती हैं, जिन्हें मैं नियंत्रित नहीं कर सकता। – AndersC

2

इनपुट के लिए धन्यवाद, और बॉक्स ने बदल दिया है कि हम इस प्रतिक्रिया के आधार पर रीफ्रेश टोकन को कैसे प्रबंधित करते हैं, साथ ही साथ हमारे कुछ साथी डेवलपर्स और ग्राहकों के साथ कुछ विस्तृत चर्चाएं भी करते हैं।

बॉक्स 14 दिनों से 60 दिनों तक चला गया। अपने आप में समय-समय पर उपयोगकर्ताओं को अपने अनुप्रयोगों के लिए अधिकतर एप्लिकेशन डेवलपर्स के मुकाबले कम करना चाहिए।

हम भी, शायद अधिक महत्वपूर्ण बात यह है कि जब यह नेटवर्क त्रुटि होती है, तो हम ताज़ा टोकन को अमान्य नहीं करते जैसे ही हम नया जारी करते हैं। अगर किसी कारण से आपको नया रीफ्रेश टोकन नहीं मिलता है, तो पुराने रीफ्रेश टोकन के साथ एक नया प्राप्त करने के लिए बस कॉल करें। आप जितनी बार चाहें उतनी बार ऐसा कर सकते हैं, जब तक कि आपको नया एक्सेस टोकन और रीफ्रेश टोकन न मिल जाए।

एक बार जब आप अपने नए एक्सेस टोकन के साथ एक सफल कॉल करते हैं, तो हम जानते हैं कि आपको नई जोड़ी मिली है, और हम पुराने रीफ्रेश टोकन को अमान्य कर देते हैं। यह बहु-सर्वर वातावरण बेहतर काम करने में भी मदद करता है, क्योंकि नई आरटी प्राप्त करने के साथ-साथ आपके क्लस्टर में कई सर्वरों से काम करने का अनुरोध भी होगा।

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