परिदृश्यों के एक जोड़े को एक oauth2 (या किसी अन्य वस्तु) प्रणाली को डिजाइन करने में टोकन और इंजीनियरिंग ट्रेड-ऑफ का उपयोग करने और ताज़ा करने के उद्देश्य को समझाने में मदद मिल सकती है:
वेब ऐप परिदृश्य
वेब ऐप परिदृश्य में आपके पास कुछ विकल्प हैं:
- यदि आपके पास अपना सत्र प्रबंधन है, तो अपने सत्र राज्य सेवा पर सत्र राज्य में अपनी सत्र आईडी के खिलाफ access_token और refresh_token दोनों को संग्रहीत करें। जब उपयोगकर्ता द्वारा एक पृष्ठ का अनुरोध किया जाता है जिसके लिए आपको संसाधन का उपयोग करने की आवश्यकता होती है तो access_token का उपयोग करें और यदि access_token की समय सीमा समाप्त हो गई है तो नए का उपयोग करने के लिए ताज़ा करें_token का उपयोग करें।
आइए कल्पना करें कि कोई व्यक्ति आपके सत्र को हाइजैक करने का प्रबंधन करता है। केवल एक चीज जो संभव है वह है आपके पृष्ठों का अनुरोध करना।
- यदि आपके पास सत्र प्रबंधन नहीं है, तो access_token को कुकी में रखें और सत्र के रूप में उपयोग करें। फिर, जब भी उपयोगकर्ता आपके वेब सर्वर से पेजों का अनुरोध करता है, तो access_token भेजें। यदि आवश्यक हो तो आपका ऐप सर्वर access_token को ताज़ा कर सकता है।
1 और 2 की तुलना:
1 में, access_token और refresh_token केवल ऑथराइजेशन सर्वर (आपके मामले में google) और आपके ऐप सर्वर के बीच के तार पर यात्रा करते हैं। यह एक सुरक्षित चैनल पर किया जाएगा। एक हैकर सत्र को हाईजैक कर सकता है लेकिन वे केवल आपके वेब ऐप के साथ बातचीत कर पाएंगे। 2 में, हैकर access_token को दूर ले जा सकता है और उन संसाधनों के लिए अपने स्वयं के अनुरोध बना सकता है जिन्हें उपयोगकर्ता ने एक्सेस की अनुमति दी है। यहां तक कि अगर हैकर को access_token की पकड़ मिलती है, तो उनके पास केवल एक छोटी विंडो होगी जिसमें वे संसाधनों तक पहुंच सकते हैं।
किसी भी तरह रिफ्रेश_टोकन और क्लायंटिड / सीक्रेट केवल सर्वर के लिए ज्ञात होते हैं, जिससे वेब ब्राउज़र से दीर्घकालिक पहुंच प्राप्त करना असंभव हो जाता है।
आइए कल्पना करें कि आप oauth2 को लागू कर रहे हैं और एक्सेस टोकन पर एक लंबा समय निर्धारित करते हैं:
1) ऐप सर्वर में छिपे होने के बाद से छोटी और लंबी एक्सेस टोकन के बीच यहां बहुत अंतर नहीं है। 2 में) किसी को ब्राउज़र में access_token मिल सकता है और फिर इसका उपयोग सीधे उपयोगकर्ता के संसाधनों को लंबे समय तक करने के लिए कर सकता है।
मोबाइल परिदृश्य
मोबाइल पर, कुछ ऐसे परिदृश्य हैं जिनके बारे में मुझे पता है:
डिवाइस पर स्टोरिड / सीक्रेट स्टोर करें और उपयोगकर्ता के संसाधनों तक पहुंच प्राप्त करने के लिए डिवाइस ऑर्केस्ट्रेट प्राप्त करें।
क्लाइंट / गुप्त रखने के लिए बैकएंड ऐप सर्वर का उपयोग करें और यह ऑर्केस्ट्रेशन करें। एक प्रकार की सत्र कुंजी के रूप में access_token का उपयोग करें और क्लाइंट और ऐप सर्वर के बीच इसे पास करें।
1 और 2 की तुलना करना
1 में) एक बार जब आपके पास डिवाइस पर ग्राहक / गुप्त होते हैं तो वे किसी भी अधिक गुप्त नहीं होते हैं। कोई भी विघटित हो सकता है और फिर अभिनय शुरू कर सकता है जैसे कि वे आप हैं, बेशक उपयोगकर्ता की अनुमति के साथ। Access_token और refresh_token भी मेमोरी में हैं और एक समझौता किए गए डिवाइस पर एक्सेस किया जा सकता है, जिसका अर्थ है कि कोई व्यक्ति आपके क्रेडेंशियल्स दिए बिना उपयोगकर्ता के रूप में आपके ऐप के रूप में कार्य कर सकता है। इस परिदृश्य में access_token की लंबाई को hackability से कोई फर्क नहीं पड़ता है क्योंकि ताज़ा_token access_token के समान स्थान पर है। 2 में) ग्राहक / गुप्त और न ही ताज़ा टोकन समझौता किया जाता है। यहां access_token expiry की लंबाई निर्धारित करती है कि कोई हैकर उपयोगकर्ताओं के संसाधनों को कितने समय तक एक्सेस कर सकता है, तो क्या उन्हें इसे पकड़ना चाहिए।
एक्सपायरी लंबाई
यहां यह निर्भर करता है कि आप अपने सिस्टम के साथ क्या हासिल कर रहे हैं, जब तक आपका access_token एक्सपायरी होना चाहिए। यदि यह उपयोगकर्ता के लिए विशेष रूप से मूल्यवान कुछ है तो यह छोटा होना चाहिए। कुछ कम मूल्यवान, यह अधिक लंबा हो सकता है।
Google जैसे कुछ लोग रिफ्रेश_टोकन को समाप्त नहीं करते हैं। कुछ स्टैकफ्लो करते हैं। समाप्ति पर निर्णय उपयोगकर्ता आसानी और सुरक्षा के बीच एक व्यापार बंद है। रिफ्रेश टोकन की लंबाई उपयोगकर्ता के रिटर्न की लंबाई से संबंधित होती है, यानी रिफ्रेश को सेट करें कि उपयोगकर्ता आपके ऐप पर कितनी बार लौटता है। यदि ताज़ा टोकन केवल उसी तरीके से समाप्त नहीं होता है जब वे निरस्त किए जाते हैं, तो एक स्पष्ट निरसन के साथ होता है। आम तौर पर, लॉग ऑन नहीं होता।
आशा है कि बल्कि लंबाई पोस्ट उपयोगी है।