2011-02-11 9 views
40

मैं अपनी आरईएसटी सेवा में सत्र प्रबंधन को लागू करने की कोशिश कर रहा हूं। सर्फिंग करते समय मुझे इन दिशानिर्देशों को पता चला:सत्र प्रबंधन: REST सेवा के लिए प्रमाणीकरण टोकन कैसे उत्पन्न करें? (जर्सी)

  1. सर्वर साइड सत्र का उपयोग नहीं करना - यह रीस्टफुल सिद्धांत का उल्लंघन करता है।

  2. का उपयोग HTTP मूल प्रमाणीकरण - अभी संभव नहीं, जैसा कि मैंने SSL का उपयोग करने के लिए नहीं पूछा हूँ/TLS (। जो कोई संदेह नहीं है मूल प्रमाणीकरण के लिए आवश्यक है)

  3. Http का उपयोग पचाने - मैंने सुना है इस नेटवर्क बढ़ जाती है यातायात। यह महंगा लगता है, खासकर जब मेरा ग्राहक मोबाइल डिवाइस है।

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

  5. मुझे प्रमाणीकरण टोकन उत्पन्न करने के विकल्प के साथ छोड़ दिया गया है, जिसे उपयोगकर्ता को हर बार भेजना पड़ता है - जो मैं स्वीकार करता हूं वह "पूरी तरह से" विश्वसनीय नहीं है।

अब मुझे यह जानने की ज़रूरत है कि मुझे इन अद्वितीय प्रमाणीकरण टोकन कैसे उत्पन्न करना चाहिए, जो कि व्यवसाय स्तर पर पर्याप्त सुरक्षित हैं? जर्सी के लिए कुछ पुस्तकालय है? क्या मुझे ओथ के लिए जाना चाहिए..मैंने सिर्फ उनके बारे में कुछ पढ़ा है, क्या वे मेरे मामले में उपयोगी हैं? कृपया ध्यान रखें कि मेरे लक्षित ग्राहक मोबाइल डिवाइस हैं - क्या वे ओएथ सेवा तक पहुंच सकते हैं ??

उत्तर

35

सादगी के लिए, मैं Jasypt के साथ पूरे टोकन एन्क्रिप्ट करने से पहले अपने खुद के प्रमाणीकरण UUID का उपयोग कर टोकन बनाएं: -

String key = UUID.randomUUID().toString().toUpperCase() + 
     "|" + someImportantProjectToken + 
     "|" + userName + 
     "|" + creationDateTime; 

StandardPBEStringEncryptor jasypt = new StandardPBEStringEncryptor(); 

... 

// this is the authentication token user will send in order to use the web service 
String authenticationToken = jasypt.encrypt(key); 

कुंजी है creationDateTime ताकि मैं समय-हैं- सत्यापित करने के लिए उपयोग कर सकते हैं जीना। इस तरह, यदि उपयोगकर्ता X मिनट के बाद एक ही प्रमाणीकरण टोकन का उपयोग करता है, तो यह अब और काम नहीं करेगा, और मैं एक 403 वर्जित कोड वापस भेजूंगा।

+0

धन्यवाद limc! इस बीच, मैंने जावा के सिक्योररैंडम क्लास पर एक नज़र डाली थी। क्या यह आपकी विधि पर पसंद करता है? – SlowAndSteady

+0

दोनों मेरी राय में ठीक काम करते हैं ... 'सृजनडेट' को जोड़ना टोकन को 'यूयूआईडी' या 'सिक्योररैंडम' से जेनरेट की गई कुंजी के साथ एक साथ अद्वितीय बनाता है। टीटीएल के खिलाफ जांच करने के लिए महत्वपूर्ण टुकड़ा 'निर्माणडेट' है। – limc

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