2017-03-13 9 views
8

मैंने स्प्रिंग बूट, स्प्रिंग सिक्योरिटी, ओएयूटीएच 2 और जेडब्ल्यूटी के साथ ऑथ टोकन के रूप में एक बुनियादी प्रमाणीकरण प्रणाली लागू की है। यह ठीक काम करता है लेकिन मैं सोच रहा था कि क्या डेटाबेस में जेडब्ल्यूटी को स्टोर करना समझ में आता है और जांच करता है कि हर बार जब कोई इसका प्रमाणीकृत अनुरोध करता है तो टोकन मौजूद होता है या नहीं? मैं विशेष रूप से निम्न परिदृश्य में सोच रहा था: उपयोगकर्ता को मोबाइल डिवाइस में प्रमाणित किया गया है और वे इसे खो देते हैं ताकि वे उस डिवाइस को प्राधिकृत करना चाहें। फिर वे एक ऑपरेशन जारी करने में सक्षम होंगे जो उनके उपयोगकर्ता आईडी को जारी टोकन को साफ़ करता है और उसे सौंपा गया सभी टोकन को प्राधिकृत करता है। कोई अन्य तरीका? क्या मैं इस गलत या जटिल चीजों को सोच रहा हूं?क्या यह डेटाबेस में जेडब्ल्यूटी को स्टोर करने के लिए समझ में आता है?

यह एक आरईएसटी एपीआई सुरक्षित करने के लिए है जिसे मोबाइल एपीपी से बुलाया जा रहा है।

उत्तर

12

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

यदि आप चाहें तो डीबी में टोकन संग्रहीत किए बिना आप अभी भी ओएथ 2 के साथ जेडब्ल्यूटी का उपयोग कर सकते हैं। जेडब्ल्यूटी के पास कॉन्फ़िगर करने योग्य समाप्ति समय होता है जिसे आप सेट कर सकते हैं - जिसके बाद वे अमान्य हैं। एक्सेस टोकन (चाहे जेडब्ल्यूटी या नहीं) आमतौर पर सुरक्षा के लिए अल्पकालिक रहना चाहिए। अगर चिंता किसी के फोन चोरी हो रही है और टोकन का उपयोग किया जा रहा है, तो मुझे लगता है कि समाधान उन टोकन को जल्दी समाप्त कर देगा (30 मिनट?)। यदि आप oauth2 का उपयोग कर रहे हैं, तो किसी को ऐप का उपयोग जारी रखने से रोकने का साधन वास्तविक मालिक के लिए प्राधिकरण सर्वर पर मोबाइल ऐप क्लाइंट को प्राधिकृत करने के लिए है ताकि कोई भी एक्सेस टोकन नहीं दिया जा सके।

+0

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

+0

ने आपके प्रश्न का उत्तर देने के लिए दूसरा पैराग्राफ जोड़ा – sdoxsee

+0

यदि आप डीबी में संग्रहीत नहीं हैं तो आप एक jwt को प्रमाणित करने का तरीका कैसे हल करते हैं? अगर फोन के लिए चोरी हो जाती है। और 30 मिनट के अंतराल के बाद तक 30 मिनट तक चोर को उपयोगकर्ता डेटा तक असीमित पहुंच नहीं मिली है। – Byrd

3

आप समाप्ति तिथि (मोबाइल 1 सप्ताह के लिए) सेट कर सकते हैं। उपयोगकर्ता के लिए कुछ कस्टम फ़ील्ड refreshId जोड़ें (आप इसके लिए यूयूआईडी का उपयोग कर सकते हैं)। अगला सेट दावा पैरामीटर ("iat") पर जारी किया गया। स्टोर refreshId डीबी में स्टोर करें और इसे दावों के पैरामीटर के रूप में सेट करें। फिर जब भी आप टोकन को मान्य करते हैं तो आपको टोकन की "आयु" की जांच करनी चाहिए। यदि यह एक घंटे से अधिक पुराना है तो आपको डीबी से डेटा लोड करना चाहिए और refreshId मूल्य की जांच करें और वर्तमान "iat" मान के साथ नया टोकन बनाएं और इसे मोबाइल डिवाइस पर भेजें। जब आपको टोकन को निष्क्रिय करने की आवश्यकता होती है तो डीबी में refreshId के लिए केवल नया मान उत्पन्न करें। एक घंटे के बाद सभी टोकन गलत होंगे, इसलिए उपयोगकर्ता को हर डिवाइस पर फिर से लॉगिन करने की आवश्यकता होगी। यदि आपको आवश्यकता हो तो आप अधिक कस्टम समाधान कर सकते हैं।

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

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