एप्लिकेशन सुरक्षा के लिए प्रमाणीकरण टोकन को सुरक्षित रूप से संभालना महत्वपूर्ण है। सर्वोत्तम दृष्टिकोण अक्सर एप्लिकेशन के प्रकार (वेब, मोबाइल, सर्वर-साइड) और उपयोग किए जा रहे विशिष्ट टोकन (एक्सेस टोकन, रिफ्रेश टोकन) पर निर्भर करता है। प्रमाणीकरण टोकन को सुरक्षित रूप से संभालने के लिए यहाँ सामान्य सिद्धांत और सर्वोत्तम अभ्यास दिए गए हैं:
सामान्य सिद्धांत इसे गुप्त रखें, इसे सुरक्षित रखें: टोकन को किसी अन्य संवेदनशील क्रेडेंशियल की तरह ही मानें। टोकन के लिए साइनिंग कुंजी केवल उन्हीं सेवाओं को दी जानी चाहिए जिन्हें इसकी आवश्यकता है। HTTPS अपनाएं: इंटरसेप्शन को रोकने के लिए हमेशा टोकन को सुरक्षित HTTPS कनेक्शन पर प्रसारित करें।
पेलोड में संवेदनशील डेटा को न्यूनतम रखें: टोकन पेलोड में संवेदनशील उपयोगकर्ता डेटा शामिल न करें, क्योंकि टोकन को आसानी से डिकोड किया जा सकता है, भले ही वे साइन किए गए हों। छोटी समाप्ति समय: एक्सेस टोकन के लिए छोटी समाप्ति समय (मिनट से घंटे) निर्धारित करें ताकि यदि कोई टोकन समझौता हो जाता है तो हमलावरों के लिए अवसर की खिड़की सीमित हो सके।
हार्डकोडिंग से बचें: एप्लिकेशन के भीतर कभी भी टोकन को हार्डकोड न करें या उन्हें प्लेनटेक्स्ट में स्टोर न करें। एप्लिकेशन के प्रकार के अनुसार टोकन भंडारण 1. वेब एप्लिकेशन
इन-मेमोरी स्टोरेज (SPAs में एक्सेस टोकन के लिए): ब्राउज़र मेमोरी में एक्सेस टोकन संग्रहीत करना एक सुरक्षित विकल्प माना जाता है, क्योंकि यह फ़ाइल सिस्टम स्टोरेज से जुड़े जोखिमों को कम करता है। यह जावास्क्रिप्ट क्लोज़र या वेब वर्कर्स का उपयोग करके हासिल किया जा सकता है, जो एक अलग ग्लोबल स्कोप में चलते हैं। हालाँकि, मेमोरी में संग्रहीत टोकन पेज रिफ्रेश होने पर या टैब बंद करने पर खो जाते हैं।
सुरक्षित, HttpOnly कुकीज़ (रिफ्रेश टोकन और पारंपरिक वेब ऐप्स के लिए): रिफ्रेश टोकन के लिए,
SameSite एट्रिब्यूट (Lax या Strict) के साथ सुरक्षित, HttpOnly कुकीज़ का उपयोग करें। HttpOnly कुकीज़ क्लाइंट-साइड जावास्क्रिप्ट के माध्यम से सुलभ नहीं होती हैं, जिससे XSS हमले के वेक्टर कम हो जाते हैं।
पारंपरिक सर्वर-रेंडर की गई वेब एप्लिकेशनों के लिए, अधिकतम सुरक्षा हेतु सर्वर पर टोकन संग्रहीत करने की अनुशंसा की जाती है। यदि क्लाइंट-साइड स्टोरेज आवश्यक है, तो एन्क्रिप्टेड सेशन कुकीज़ का उपयोग करें।
लोकल स्टोरेज और सेशन स्टोरेज से बचें: संवेदनशील टोकन को localStorage या sessionStorage में संग्रहीत न करें क्योंकि वे क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों के प्रति संवेदनशील होते हैं। 2. मोबाइल एप्लिकेशन (iOS और Android)
प्लेटफ़ॉर्म-विशिष्ट सुरक्षित भंडारण: ऑपरेटिंग सिस्टम के सुरक्षित भंडारण तंत्र का उपयोग करें। iOS: कीचेन (Keychain) का उपयोग करें। Android: कीस्टोर (KeyStore) या Android आंतरिक डेटा का उपयोग करें। ये तंत्र संवेदनशील डेटा की सुरक्षा करने और डिवाइस पर अन्य एप्लिकेशनों से टोकन को सुरक्षित रखने के लिए डिज़ाइन किए गए हैं।
3. सर्वर-साइड एप्लिकेशन सर्वर-साइड स्टोरेज: उन एप्लिकेशनों के लिए जहां बैकएंड एपीआई कॉल करता है, टोकन सर्वर पर संग्रहीत किए जाने चाहिए। यह सुरक्षा का उच्चतम स्तर प्रदान करता है क्योंकि टोकन क्लाइंट के संपर्क में नहीं आते हैं।
एन्क्रिप्टेड स्टोरेज: यदि टोकन को लंबे समय तक संग्रहीत रखना है, तो उन्हें डेटाबेस या फ़ाइल सिस्टम में संग्रहीत करते समय एन्क्रिप्ट करें। टोकन प्रबंधन के सर्वोत्तम अभ्यास रिफ्रेश टोकन: उपयोगकर्ता को बार-बार पुनः प्रमाणीकरण किए बिना नए, अल्पकालिक एक्सेस टोकन प्राप्त करने के लिए रिफ्रेश टोकन का उपयोग करें। रिफ्रेश टोकन का जीवनकाल लंबा होना चाहिए, उन्हें सुरक्षित रूप से संग्रहीत किया जाना चाहिए (जैसे, HttpOnly कुकीज़), और आदर्श रूप से उपयोग के बाद उन्हें घुमाया जाना चाहिए। टोकन रद्दीकरण: समझौते या उपयोगकर्ता लॉगआउट की स्थिति में, टोकन, विशेष रूप से रिफ्रेश टोकन को रद्द करने के लिए एक रणनीति लागू करें।
न्यूनतम दावे: प्रदर्शन और सुरक्षा के लिए टोकन पेलोड में केवल आवश्यक न्यूनतम दावे शामिल करें। क्लॉक स्कीव: समय-आधारित दावों (जैसे समाप्ति) को मान्य करते समय, सर्वरों के बीच मामूली समय के अंतर को ध्यान में रखने के लिए एक छोटे क्लॉक स्कीव (कुछ सेकंड) की अनुमति देने पर विचार करें।
बैकएंड फॉर फ्रंटएंड (BFF) पैटर्न: सिंगल पेज एप्लीकेशन (SPAs) के लिए, बैकएंड फॉर फ्रंटएंड (BFF) पैटर्न का उपयोग करने पर विचार करें जहाँ बैकएंड टोकन अधिग्रहण और भंडारण को संभालता है, जो SPA और प्रमाणीकरण सर्वर के बीच एक सुरक्षित मध्यस्थ के रूप में कार्य करता है।