मैं अपने ऐप पर काम कर रहा हूं और मैं प्रमाणीकरण और प्राधिकरण के लिए जेडब्ल्यूटी का उपयोग कर रहा हूं और मैं जेडब्ल्यूटी को स्टोर करने के लिए सबसे अच्छा समाधान खोजने की कोशिश कर रहा हूं। (वर्तमान संस्करण में, मेरे पास सत्र ऑब्जेक्ट में सर्वर पर जेडब्ल्यूटी संग्रहीत है)

मेरे वर्तमान समाधान में कई समस्याएं हैं, इसलिए मैंने अलग-अलग कार्यान्वयन के लिए निर्णय लिया - क्लाइंट पर httpOnly कुकी में जेडब्ल्यूटी संग्रहीत करना।

मेरा प्रश्न है, मुझे कैसे पता चलेगा, कि उपयोगकर्ता लॉग इन है या नहीं? (मुझे AuthGuard के कारण यह जानने की आवश्यकता है - मार्गों की सुरक्षा के लिए, उदाहरण के लिए /home को ऐसा नहीं करना चाहिए लॉग आउट उपयोगकर्ताओं के लिए सुलभ हो)। चूंकि कुकी केवल http है, मैं इसे क्लाइंट पर सत्यापित नहीं कर सकता।

वर्तमान कार्यान्वयन में, मेरे पास बैकएंड पर केवल जाँच के लिए विशेष मार्ग है, यदि उपयोगकर्ता के पास सत्र ऑब्जेक्ट में jwt है। लेकिन यह बहुत अच्छा कार्यान्वयन नहीं है - क्लाइंट को हर बार अनुरोध भेजना पड़ता है जब वह संरक्षित मार्ग लोड करना चाहता है।

आपके विचारों के लिए धन्यवाद।

2
Petr Jelínek 30 नवम्बर 2019, 21:43

1 उत्तर

सबसे बढ़िया उत्तर

आप स्वयं JWT की समाप्ति तिथि निर्धारित कर सकते हैं। क्लाइंट-साइड आप एक लूप बना सकते हैं जो लगातार समाप्ति की जांच कर रहा है (यानी: setInterval)।

मैं नहीं केवल इस तथ्य पर निर्भर रहूंगा कि एक JWT टोकन मौजूद है कि "सत्र" मान्य है। एक JWT टोकन का उपयोग केवल यह पहचानने के लिए करें कि उपयोगकर्ता कौन है जैसे UUID, रैंडम स्ट्रिंग आदि का उपयोग करके।

एपीआई के प्रत्येक बाद के अनुरोध के लिए, जेडब्ल्यूटी टोकन पास करते समय, आपको यह सुनिश्चित करने के लिए हमेशा सत्यापन सर्वर-साइड करना चाहिए:

  1. टोकन लिफाफा मान्य है (आपकी गुप्त कुंजी द्वारा हस्ताक्षरित किया जा रहा है)।
  2. विशिष्ट पहचानकर्ता एक वैध खाते/उपयोगकर्ता से मेल खाता है।

एक httpOnly कुकी का प्रयोग न करें, वस्तुतः लगभग किसी भी चीज के लिए! यदि यह जेडब्ल्यूटी टोकन लीक हो गया है (यानी: असंख्य उपकरणों द्वारा कब्जा कर लिया गया है तो आपका एचटीटीपी केवल ट्रैफिक गुजरेगा) यह एक हमले वेक्टर को उजागर करता है जो एक अभिनेता को इस उपयोगकर्ता सत्र का प्रतिरूपण करने की अनुमति देता है।

अपने दूसरे प्रश्न का उत्तर देने के लिए, आप JWT टोकन को localStorage जैसे माध्यम में स्टोर कर सकते हैं। JWT का वजन काफी हल्का होना चाहिए, जहां यह अपेक्षा की जाती है कि आप इसे प्रत्येक अनुरोध के साथ भेजें।

आशा है कि यह आपके लिए चीजों पर कुछ प्रकाश डालने में मदद करता है। अगर आपको कोई और चिंता या सवाल है तो मुझे बताएं!

2
yomateo 1 पद 2019, 11:19