क्या मुझे अपने उपयोगकर्ता के दावों को JWT टोकन में संग्रहित करना चाहिए?


18

मैं एक संसाधन सर्वर के अनुरोधों को प्रमाणित करने के लिए HTTP हेडर में JWT टोकन का उपयोग कर रहा हूं। संसाधन सर्वर और सामान्य सर्वर Azure पर दो अलग-अलग कार्यकर्ता भूमिकाएँ हैं।

मैं अपने दिमाग को इस बात के लिए तैयार नहीं कर सकता कि मुझे टोकन में दावों को संग्रहीत करना चाहिए या उन्हें किसी अन्य तरीके से अनुरोध / प्रतिक्रिया के लिए संलग्न करना चाहिए। दावा सूची क्लाइंट-साइड UI तत्वों के प्रतिपादन के साथ-साथ सर्वर पर डेटा तक पहुंच को प्रभावित करती है। इस कारण से मैं यह सुनिश्चित करना चाहता हूं कि अनुरोध प्राप्त होने से पहले सर्वर द्वारा प्राप्त दावे प्रामाणिक और मान्य हों।

दावों के उदाहरण हैं: CanEditProductList, CanEditShopDescription, CanReadUserDesails।

जिन कारणों से मैं JWT टोकन का उपयोग करना चाहता हूं वे हैं:

  • दावों के क्लाइंट-साइड संपादन (यानी दावे सूची को हैक करना) के खिलाफ बेहतर सुरक्षा।
  • हर अनुरोध पर दावों को देखने की जरूरत नहीं है।

जिन कारणों से मैं JWT टोकन का उपयोग नहीं करना चाहता:

  • ऑर्ट सर्वर को फिर ऐप-केंद्रित दावों की सूची को जानना होगा।
  • टोकन हैक-एंट्री का एकल बिंदु बन जाता है।
  • मैंने कुछ बातें पढ़ते हुए कहा है कि JWT टोकन ऐप-स्तरीय डेटा के लिए अभिप्रेत नहीं हैं।

मुझे ऐसा लगता है कि दोनों में कमियां हैं, लेकिन मैं इन दावों को टोकन में शामिल करने की दिशा में झुक रहा हूं और केवल उन लोगों द्वारा इसे चलाना चाहता हूं, जो इससे पहले निपट चुके हैं।

नोट: मैं सभी एपीआई अनुरोधों के लिए HTTPS का उपयोग करूंगा, इसलिए यह मुझे लगता है कि टोकन सुरक्षित 'पर्याप्त' होगा। मैं AngularJS, C #, Web API 2 और MVC5 का उपयोग कर रहा हूं।


अब यह पढ़ रहा है .... और यदि आप कर सकते हैं तो एक अपडेट पसंद करेंगे। मेरी रुचि होगी कि आपने क्या किया, जैसा कि मैं भी सोच रहा हूँ .. सोच रहा हूँ और मुझे याद आ रहा है कि कैसे कुछ हिस्सों को काम करने का इरादा है। उपयोगकर्ता प्राधिकरण टोकन प्राप्त करता है, लेकिन फिर दावे कैसे किए जाते हैं ... क्या आप अपने निष्कर्षों पर समझा सकते हैं ... जैसा कि यह शायद मेरी मदद करेगा।
सीबकिट डिक

जवाबों:


7

मैं अपने jwt में केवल पहचानकर्ता के दावे (उपयोगकर्ता नाम आदि) (एन्क्रिप्टेड) ​​को संग्रहीत करता हूं।

फिर जब मुझे सर्वर (एपीआई) पर टोकन मिलता है तो मैं लुकअप सर्वर साइड (डीबी, या लोकल नेटवर्क एपि कॉल) कर सकता हूं और उपयोगकर्ता (एप्स, रोल्स इत्यादि) के सभी संघों को पुनः प्राप्त कर सकता हूं।

हालाँकि यदि आप jwt में अधिक सामान रखना चाहते हैं तो आकार से सावधान रहें क्योंकि यह प्रत्येक अनुरोध पर भेजा जाएगा, लेकिन संवेदनशील दावा डेटा एन्क्रिप्ट करना सुनिश्चित करें।


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

1
मैंने अभी तक अपने क्रियान्वयन में वह कमी नहीं लाई है :), लेकिन हाँ, मैं एक कैशिंग सर्वर का उपयोग करने के बारे में सोच रहा था ताकि इस तरह से मैं db को अक्सर हिट न कर सकूँ और अगर कोई भूमिका बदल जाए तो कैश को नई अनुमति देने के लिए हटाया जा सकता है सहेजे गए कैश को लोड करने में भूमिका निभाई। मेरे मामले में मैं शायद अमेज़ॅन AWS elsticache का उपयोग करूंगा जो खुले मेमेकैस्ट पर आधारित है लेकिन कॉन्फ़िगर करने और उपयोग करने में आसान है।
wchoward

मुझे भी लगता है कि संसाधन सर्वर पर सभी आवश्यक जानकारी प्राप्त करना और उन्हें टोकन में संग्रहीत न करना एक बेहतर विचार है।
माटूस मिगाला

इसलिए हर अनुरोध के लिए आपको उपयोगकर्ताओं की भूमिकाएँ प्राप्त होती हैं ... दावे ..., क्या आप मुझे एक लेख या ऐसी किसी चीज़ की ओर संकेत कर सकते हैं, जो इसे संभव होने के रूप में दर्शाता है। वर्तमान में सत्र का उपयोग करते हुए im, लेकिन चीजों को करने के बेहतर तरीके की तलाश में है, लेकिन हर अनुरोध को देखना सही नहीं लगता है?
सीबकिट डिक

3

ऐसा लगता है कि प्रमाणीकरण (जो उपयोगकर्ता है) और प्राधिकरण (उपयोगकर्ता को क्या करने की अनुमति है) स्पष्ट रूप से विभाजित नहीं हैं जैसा कि आप चाहते हैं।

यदि आप नहीं चाहते कि प्रमाणीकरण सर्वर को यह पता चले कि उपयोगकर्ता किस अधिकार का हकदार है, तो उस JWT में दावों को केवल wchoward जैसे सुझाव के लिए सीमित करें। आपके पास एक और सर्वर हो सकता है जिसे प्राधिकरण सर्वर के रूप में जाना जाता है जो उपयोगकर्ता के लिए हकदार है।

जब क्लाइंट द्वारा पहले प्रमाणीकरण टोकन के साथ प्रस्तुत किया जाता है, तो प्राधिकरण सर्वर संसाधन सर्वर द्वारा किया जा सकता है। संसाधन सर्वर तब प्राधिकरण के दावे वाले क्लाइंट को एक टोकन भेजेगा।

नोट: दोनों JWTs को अलग-अलग कुंजी द्वारा हस्ताक्षरित किया जाना चाहिए।

पेशेवरों:

  • प्रमाणीकरण और प्राधिकरण अलग से प्रबंधित किए जाते हैं।
  • संसाधन सर्वर को प्रत्येक अनुरोध पर प्राधिकरण को देखने की आवश्यकता नहीं है।
  • UI के पास प्राधिकरण देखने के लिए एक्सेस है लेकिन इसे संपादित नहीं किया गया है।

कोन:

  • क्लाइंट को एक के बजाय दो टोकन संभालने की जरूरत है।
  • एक प्राधिकरण सर्वर जोड़ना प्रबंधन करने के लिए एक और गतिशील भाग जोड़ता है।

1
यह न भूलें कि जब आप UI में प्राधिकरण की जांच करते हैं, तब भी आपको अनुरोध आने पर सर्वर साइड पर प्राधिकरण की जांच करनी होगी।
चाड क्लार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.