( यह इस धागे से उत्पन्न हुआ क्योंकि यह वास्तव में स्वयं का प्रश्न है और नोड्सज आदि के लिए विशिष्ट नहीं है)
मैं एक REST API सर्वर को प्रमाणीकरण के साथ कार्यान्वित कर रहा हूं, और मैंने JWT टोकन हैंडलिंग को सफलतापूर्वक कार्यान्वित किया है ताकि उपयोगकर्ता उपयोगकर्ता नाम / पासवर्ड के साथ लॉगिन लॉगिन के माध्यम से लॉगिन कर सके, जिस पर एक JWT टोकन एक सर्वर गुप्त से उत्पन्न होता है और वापस आ जाता है ग्राहक। टोकन को क्लाइंट से सर्वर से प्रत्येक प्रमाणित एपीआई अनुरोध में पारित किया जाता है, जिस पर टोकन को सत्यापित करने के लिए सर्वर रहस्य का उपयोग किया जाता है।
हालांकि, मैं वास्तव में कैसे और किस हद तक टोकन को मान्य किया जाना चाहिए, वास्तव में सुरक्षित प्रणाली बनाने के लिए सर्वोत्तम प्रथाओं को समझने की कोशिश कर रहा हूं। बिल्कुल "टोकन को मान्य" करने में क्या शामिल होना चाहिए? क्या यह पर्याप्त है कि हस्ताक्षर को सर्वर-गुप्त का उपयोग करके सत्यापित किया जा सकता है, या क्या मुझे सर्वर में संग्रहीत कुछ डेटा के खिलाफ टोकन और / या टोकन पेलोड को भी क्रॉस-चेक करना चाहिए?
एक टोकन आधारित प्रमाणीकरण प्रणाली केवल प्रत्येक अनुरोध में उपयोगकर्ता नाम / पासवर्ड पारित करने के रूप में सुरक्षित होगी, बशर्ते कि उपयोगकर्ता का पासवर्ड प्राप्त करने की तुलना में टोकन प्राप्त करना समान रूप से या अधिक कठिन हो। हालाँकि, मैंने जो उदाहरण देखे हैं, उनमें टोकन बनाने के लिए आवश्यक जानकारी केवल उपयोगकर्ता नाम और सर्वर-साइड गुप्त है। क्या इसका मतलब यह नहीं है कि एक मिनट के लिए यह मान लेना कि दुर्भावनापूर्ण उपयोगकर्ता को सर्वर के रहस्य का ज्ञान है, वह अब किसी भी उपयोगकर्ता की ओर से टोकन का उत्पादन कर सकता है , जिससे न केवल एक दिए गए उपयोगकर्ता तक पहुंच हो सकती है, बल्कि यह भी होगा कि यदि पासवर्ड था प्राप्त, लेकिन वास्तव में सभी उपयोगकर्ता खातों के लिए?
यह मुझे सवालों के घेरे में लाता है:
1) क्या जेडब्ल्यूटी टोकन सत्यापन केवल टोकन के हस्ताक्षर को सत्यापित करने तक सीमित होना चाहिए, जो अकेले सर्वर की अखंडता पर निर्भर है, या एक अलग सत्यापन तंत्र के साथ है?
कुछ मामलों में मैंने टोकन और सर्वर सत्रों के संयुक्त उपयोग को देखा है, जहां एक सत्र / लॉगिन समापन बिंदु के माध्यम से सफल लॉगिन स्थापित किया गया है। एपीआई अनुरोध टोकन को मान्य करते हैं, और सत्र में संग्रहीत कुछ डेटा के साथ टोकन में पाए गए डिकोड किए गए डेटा की तुलना भी करते हैं। हालांकि, सत्र का उपयोग करना कुकीज़ का उपयोग करने का अर्थ है, और कुछ अर्थों में यह टोकन आधारित दृष्टिकोण का उपयोग करने के उद्देश्य को पराजित करता है। यह कुछ ग्राहकों के लिए भी समस्या पैदा कर सकता है।
कोई भी वर्तमान में एक मेमकेच या इसी तरह के उपयोग में आने वाले सर्वर की कल्पना कर सकता है, यह सुनिश्चित करने के लिए कि भले ही सर्वर रहस्य से समझौता किया गया हो, ताकि एक हमलावर "वैध" टोकन का उत्पादन कर सके, केवल वही सटीक टोकन जो / लॉगिन एंडपॉइंट के माध्यम से उत्पन्न हुए थे स्वीकार किया जाएगा। क्या यह उचित है या सिर्फ अतिरेक / अतिरेक?
2) यदि JWT हस्ताक्षर सत्यापन टोकन को मान्य करने का एकमात्र साधन है, जिसका अर्थ है कि सर्वर गुप्त की अखंडता ब्रेकिंग पॉइंट है, सर्वर रहस्यों को कैसे प्रबंधित किया जाना चाहिए? एक पर्यावरण चर से पढ़ें और बनाया (यादृच्छिक?) एक बार तैनात स्टैक के अनुसार? समय-समय पर पुन: नया या घुमाया जाता है (और यदि हां, तो मौजूदा वैध टोकन को कैसे संभालना है जो रोटेशन से पहले बनाए गए थे लेकिन रोटेशन के बाद मान्य करने की आवश्यकता है, शायद यह पर्याप्त है अगर सर्वर किसी भी समय वर्तमान और पिछले रहस्य पर पकड़ रखता है) ? कुछ और?
हो सकता है कि जब सर्वर से समझौता होने का खतरा होता है, तो मैं सामान्य रूप से पागल हो जाता हूं, जो निश्चित रूप से एक अधिक सामान्य समस्या है जिसे सभी क्रिप्टोग्राफिक स्थितियों में संबोधित करने की आवश्यकता है ...
RSAPrivateKey privateKey
??