JWT अपने आप में असुरक्षित नहीं हैं, पर इन्हें ग़लत ढंग से इस्तेमाल करना बेहद आसान है। अधिकांश गंभीर समस्याएँ टोकन के विचार में नहीं, बल्कि उसे लागू करने की चूकों में छिपी होती हैं — किसी सत्यापन-क़दम को छोड़ देना, किसी संवेदनशील जानकारी को खुला रख देना, या यह मान लेना कि टोकन को रद्द करना आसान है। इन ग़लतियों के पैटर्न को जान लेना ही इनसे बचने का सबसे अच्छा तरीक़ा है।
हस्ताक्षर के सत्यापन को कभी न छोड़ें
सबसे ख़तरनाक ग़लती है टोकन के हस्ताक्षर को ठीक से न जाँचना। चूँकि पेलोड पढ़ने में आसान होता है, कुछ लागूकरण आलस्य या भूलवश दावों को बिना हस्ताक्षर सत्यापित किए ही पढ़ लेते हैं। ऐसा करते ही पूरी सुरक्षा ढह जाती है, क्योंकि कोई भी मनचाहा पेलोड बनाकर भेज सकता है।
हस्ताक्षर का सत्यापन ही वह एकमात्र चीज़ है जो टोकन को भरोसेमंद बनाती है। इसलिए हर अनुरोध पर, बिना अपवाद के, हस्ताक्षर की पुष्टि होनी चाहिए, और यह पुष्टि सफल होने के बाद ही दावों पर भरोसा करना चाहिए।
एल्गोरिथ्म की चालाकियों से सावधान रहें
एक सूक्ष्म पर गंभीर ख़तरा यह है कि कुछ लागूकरण टोकन के हेडर में बताए एल्गोरिथ्म पर आँख मूँदकर भरोसा कर लेते हैं। अगर सर्वर हमलावर के बताए एल्गोरिथ्म को स्वीकार कर ले, तो वह किसी कमज़ोर या ख़ाली एल्गोरिथ्म का दुरुपयोग करके सत्यापन को धोखा दे सकता है।
इससे बचने के लिए सर्वर को ख़ुद तय करना चाहिए कि कौन-सा एल्गोरिथ्म स्वीकार्य है, और हेडर में आए मान को बिना जाँचे नहीं अपनाना चाहिए। अपेक्षित एल्गोरिथ्म को स्पष्ट रूप से तय करना इस पूरे वर्ग के हमलों को बंद कर देता है।
संवेदनशील डेटा पेलोड में न रखें
चूँकि पेलोड केवल एन्कोडेड होता है, एन्क्रिप्टेड नहीं, इसलिए उसमें कोई भी गोपनीय जानकारी रखना ख़तरनाक है। पासवर्ड, निजी विवरण या आंतरिक रहस्य टोकन में रखते ही हर उस व्यक्ति के सामने खुल जाते हैं जिसके हाथ टोकन लगे।
पेलोड में केवल वही रखें जिसे सार्वजनिक होने पर भी कोई हानि न हो — आम तौर पर बस एक पहचानकर्ता और कुछ बुनियादी दावे। अगर वाक़ई गोपनीयता ज़रूरी हो, तो टोकन को अलग से एन्क्रिप्ट करना पड़ता है, और यह एक सचेत निर्णय होना चाहिए।
समाप्ति को गंभीरता से लें
बिना समाप्ति वाला टोकन एक स्थायी जोखिम है। अगर वह कभी चुरा लिया जाए, तो हमेशा के लिए वैध रहता है। इसलिए हर टोकन को एक उचित समाप्ति-समय देना चाहिए, ताकि उसकी क्षति-संभावना समय के साथ अपने आप सीमित हो जाए।
समाप्ति-समय का चुनाव एक संतुलन है। बहुत लंबा समय जोखिम बढ़ाता है, बहुत छोटा समय उपयोगकर्ता को बार-बार परेशान करता है। कई प्रणालियाँ छोटे जीवनकाल वाले मुख्य टोकन और एक अलग पुनर्नवीनीकरण-व्यवस्था का मेल इस्तेमाल करती हैं।
रद्दीकरण की कठिनाई को न भूलें
JWT की आत्मनिर्भरता का एक छिपा हुआ मोल है — किसी जारी टोकन को बीच में रद्द करना कठिन है। चूँकि सर्वर टोकन की कोई प्रति नहीं रखता, इसलिए किसी एक टोकन को अचानक अमान्य करना सहज नहीं। यह तब समस्या बनता है जब कोई खाता समझौता हो जाए या किसी सत्र को तुरंत बंद करना ज़रूरी हो।
इस कठिनाई से निपटने के लिए प्रणालियाँ अक्सर छोटे जीवनकाल का सहारा लेती हैं या किसी निरस्त-सूची जैसी अतिरिक्त व्यवस्था जोड़ती हैं। पर यह याद रखना ज़रूरी है कि ऐसी सूची जोड़ते ही JWT की वह सादगी कुछ कम हो जाती है जिसके लिए उसे चुना गया था।
गुप्त कुंजी की रक्षा सबसे ज़रूरी है
पूरी प्रणाली अंततः एक गुप्त कुंजी पर टिकी है। अगर वह कुंजी लीक हो जाए, तो कोई भी वैध दिखने वाले टोकन गढ़ सकता है और पूरी सुरक्षा बेमानी हो जाती है। इसलिए कुंजी की रक्षा को बाक़ी हर उपाय से ऊपर रखना चाहिए।
कुंजी को मज़बूत रखें, उसे कोड या सार्वजनिक स्थानों में कभी न रखें, और समय-समय पर बदलने की व्यवस्था रखें। एक मज़बूत एल्गोरिथ्म भी कमज़ोर या उजागर कुंजी के सामने बेकार है।
दावों पर आँख मूँदकर भरोसा न करें
हस्ताक्षर सत्यापित होने के बाद भी, हर दावे को बिना सोचे स्वीकार कर लेना एक भूल है। हस्ताक्षर केवल यह साबित करता है कि दावे बदले नहीं गए — यह नहीं कि वे इस ख़ास अनुरोध के लिए उपयुक्त हैं। मसलन सर्वर को जाँचना चाहिए कि टोकन वाक़ई उसी के लिए जारी किया गया था और अभी समाप्त नहीं हुआ है।
कई लागूकरण समाप्ति-समय या टोकन के इच्छित प्राप्तकर्ता जैसे दावों की जाँच छोड़ देते हैं, और मान बैठते हैं कि बस हस्ताक्षर सही होना पर्याप्त है। यह एक ख़तरनाक चूक है, क्योंकि एक वैध-हस्ताक्षरित पर समाप्त या ग़लत प्राप्तकर्ता वाला टोकन भी दुरुपयोग का रास्ता खोल सकता है।
इसीलिए सत्यापन को दो चरणों में सोचना चाहिए — पहले हस्ताक्षर की पुष्टि, और फिर दावों की प्रासंगिकता की जाँच। दोनों चरण पूरे होने पर ही किसी अनुरोध को अनुमति देनी चाहिए।
टोकन को सुरक्षित रूप से ले जाएँ और संभालें
आख़िर में, टोकन उतना ही सुरक्षित है जितना उसे ले जाने और रखने का तरीक़ा। टोकन को हमेशा एन्क्रिप्टेड कनेक्शन पर भेजें, ताकि वह रास्ते में चुराया न जा सके। क्लाइंट में उसे ऐसी जगह रखें जहाँ उसकी चोरी का जोखिम कम हो।
इन सब आदतों का सार सरल है — JWT को एक हस्ताक्षरित दावे की तरह समझें, हर बार हस्ताक्षर जाँचें, संवेदनशील जानकारी बाहर रखें, समाप्ति निभाएँ और कुंजी की रक्षा करें। ये कुछ अनुशासन मिलकर JWT को सुरक्षा का झूठा भरोसा बनने से रोक देते हैं।