2017-05-15 19 views
10

में भूमिका दावा (या कोई अन्य दावा) अपडेट/बदलें मैं जेडब्ल्यूटी (एपीआई एंडपॉइंट्स को प्रतिबंधित करने के लिए) के अंदर उपयोगकर्ता भूमिकाएं संग्रहीत कर रहा हूं। भूमिकाओं को व्यवस्थापक द्वारा बदला जा सकता है।जेडब्ल्यूटी

यदि कोई भूमिका बदल दी गई है। मैं इसे सभी टोकन के अंदर कैसे प्रतिबिंबित करना चाहता हूं? मैं समाधान की एक जोड़ी के बारे में सोचा है:

  • अगर मैं ताज़ा टोकन का उपयोग करना चाहते हैं, उपयोगकर्ता तक पहुँच टोकन की समाप्ति तिथि समाप्त हो गई है इंतजार करना होगा।

  • मैं बदले गए उपयोगकर्ता आईडी का रिकॉर्ड रख सकता हूं और प्रत्येक अनुरोध की जांच कर सकता हूं, और फिर उपयोगकर्ता बदल दिया गया है तो एक नया टोकन वापस कर सकता है।

क्या ऐसा करने का कोई मानक तरीका है?

+0

जेडब्ल्यूटी उत्पन्न करने के लिए आप क्या उपयोग कर रहे हैं? IdentityServer? Openddict? – kg743

+0

या तो: कम टोकन जीवनकाल सेट करें। जब उनकी पहचान बदलती है तो उपयोगकर्ता reauths का अनुरोध करें। संदर्भ टोकन का प्रयोग करें। रेफ टोकन का एक अच्छा संक्षिप्त अवलोकन यहां है https://leastprivilege.com/2015/11/25/reference-tokens-and-introspection/ कूदने के लिए एक अच्छा मानसिक उछाल यह सोचता है कि जब आप सक्रिय निर्देशिका में उपयोगकर्ता समूह को बदलते हैं यह एक relogin की आवश्यकता है। यदि उपयोगकर्ता नहीं करता है, तो उनके पास अभी भी वही, पुराना, समूह है। यदि यह इसके लिए पर्याप्त है, तो यह आपके लिए पर्याप्त होना चाहिए। जब तक कि आप वास्तव में उपयोगकर्ता असभ्य समाधान नहीं चाहते हैं, जहां उन्हें हर 5 सेकंड में फिर से जाना होगा। ;) – Mardoxx

+0

@ केविन गिसबर्ग मैं सिस्टम से JwtSecurityTokenHandler का उपयोग कर रहा हूं। Identity.Tokens। लेकिन टोकन उत्पन्न करना समस्या नहीं है :) – tobbe

उत्तर

3

रीफ्रेश टोकन समाधान नहीं लगते हैं यदि आप तत्काल होने वाले परिवर्तनों की परवाह करते हैं, तो संभवतः आप नहीं चाहते हैं कि कोई उपयोगकर्ता कुछ समय के लिए मॉडरेशन टूल एक्सेस कर सके यदि आप उसकी अनुमतियों को निरस्त करते हैं।

आप क्या कर सकते हैं उपयोगकर्ता के सापेक्ष jwt टोकन में संस्करण संख्या रखना है, जैसे कि यह versionKey के साथ mongoose कैसे करता है। ऐसा करके, आप किसी दिए गए उपयोगकर्ता के लिए डेटाबेस में किसी के विरुद्ध इस संस्करण की जांच कर पाएंगे। प्रत्येक बार जब आप इस उपयोगकर्ता की भूमिकाओं को बदलते हैं, तो आप इस संस्करण को बढ़ाएंगे, यदि jwt का संस्करण मेल नहीं खाता है, तो बस सही भूमिकाओं और संस्करण के साथ एक नया बनाएं और इसे वापस उपयोगकर्ता को भेजें।

मुझे विश्वास नहीं है कि इसके लिए एक उचित मानक है, क्योंकि जेडटी डिज़ाइन द्वारा अपरिवर्तनीय है, अगर आपको इसे "अपडेट" करने की आवश्यकता है तो आपको इसे पूरी तरह से बदलना होगा।

+0

हम्म ठीक है, यह स्मार्ट है, लेकिन मैं स्टेटलेसनेस खो देता हूं (एक शब्द?) जो जेडब्ल्यूटी की ताकत में से एक होना चाहिए। शायद मुझे सिर्फ एक यादृच्छिक टोकन के साथ जाना चाहिए ..? :) – tobbe

+0

यकीन नहीं है कि मुझे यह सही हाहा मिला है, लेकिन जेडब्ल्यूटी सुरक्षित जानकारी विनिमय के लिए भी उपयोगी हैं जिसका अर्थ है कि आप निश्चित रूप से उन डेटा में डाल सकते हैं जिनका उपयोग सत्यापन और संभावित पुन: पीढ़ी के लिए किया जा सकता है। –

+0

ओह मुझे लगता है कि मुझे यह मिल गया है, हम सर्वर पर या आपके डीबी में सत्रों के बारे में बात नहीं कर रहे हैं, बल्कि यह आपके उपयोगकर्ताओं की भूमिकाओं के बारे में डेटाबेस में पहले से मौजूद एक जानकारी है और जेडब्ल्यूटी को संभालने के लिए अतिरिक्त कार्यान्वयन नहीं है, डॉन विश्वास नहीं है कि वही बात है। –

4

जेडब्ल्यूटी टोकन अपरिवर्तनीय हैं ताकि आप मौजूदा टोकन पर दावों को बदल/अपडेट नहीं कर सकें - इस प्रकार आपको एक नया जेडब्ल्यूटी टोकन जारी करना होगा।

जो जेडब्ल्यूटी - टोकन निरसन के साथ सबसे बड़ी समस्या का कारण बनता है। कोई अच्छा समाधान नहीं है। आप क्या कर सकते

  • रखें जेडब्ल्यूटी समाप्ति की तारीख लघु (और वैकल्पिक ताज़ा टोकन का उपयोग)

  • उपयोग एक काली सूची ('स्टेटलेस' भाग इस तरह से खोने को निरस्त कर दिया टोकन की एक सूची रखने के लिए निश्चित रूप से है)

  • परिवर्तन गुप्त कुंजी (ध्यान रखें कि यह सभी उपयोगकर्ताओं के सभी मान्य टोकन रद्द)

सबसे अच्छा समाधान पर निर्भर करता है ठोस मामला

संबंधित मुद्दे