2013-06-20 6 views
13

पर भेजे गए गतिशील यूआरएल के साथ वसंत सुरक्षा पासवर्ड वसूली को लागू करने के लिए मार्गदर्शिका मुझे पासवर्ड रिकवरी करना बहुत मुश्किल लगता है, क्योंकि मैंने इसे पहले कभी नहीं किया है।ईमेल

स्प्रिंग सुरक्षा, जहां पासवर्ड ठीक से मिश्रित होता है और उपयोगकर्ता भूमिकाओं को लागू किया और सही ढंग से काम:

अब तक मैं जो वेब एप्लिकेशन है।

रणनीति stackoverflow से संकेत अनुसंधान:

  1. उपयोगकर्ता हिट भूल-पासवर्ड बटन, जहां वह अपने ई-मेल पते में प्रवेश करती है।
  2. गतिशील लिंक ईमेल पते पर भेजा है
  3. उपयोगकर्ता खोलता ईमेल पते में लिंक
  4. कौन सा उसे पासवर्ड रीसेट पेज

क्या ज्ञात नहीं है पर रीडायरेक्ट:

  • लिंक देने के लिए कैसे गतिशील प्रकृति - पीढ़ियों के तरीके
  • लिंक में एक टाइमआउट है - कुछ प्रश्न यहां पाए गए थे, लेकिन अक्सर कस्टम हैंडलर या वसंत सेकंड में विस्तार शामिल होते हैं शुद्धता कार्यक्षमता
  • ऐसे गतिशील लिंक
  • अस्थायी लिंक संग्रहण विधियों - डेटाबेस, सत्र इत्यादि का जवाब देने के लिए एक अनुरोध मैपिंग विधियां?

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

मैं छात्र हूं इसलिए विशेष रूप से जावा के संदर्भ में ऐसा करने के लिए वास्तव में उद्योग के सर्वोत्तम अभ्यासों को नहीं जानता, इसलिए मुझे उम्मीद है कि कोई भी मदद करने में सक्षम होगा।

+0

मैंने इस उपयोग के मामले में एक जावा परियोजना लागू की है। यह गिटहब, ओपन सोर्स पर है। आप एक नज़र देख सकते हैं: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows – OhadR

उत्तर

18

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

Grails स्प्रिंग सुरक्षा UI प्लगइन में पहले से ही forgot password विकल्प है जिसका आप या तो सीधे उपयोग कर सकते हैं या संदर्भ के रूप में उपयोग कर सकते हैं।

+0

महान, सरल और संक्षिप्त। मेरा मानना ​​है कि ईमेलड्रेस + टाइमस्टैम्प (नमक के रूप में) हैश पीढ़ी लिंक पीढ़ी के लिए काम करेगा? डायनामिक लिंक का जवाब देने के लिए त्वरित संदर्भ के लिए मैं कुछ भी उपयोग करता हूं: \t @RequestMapping (value = "/ var/{name}", method = RequestMethod.GET) – Aubergine

+0

क्या आप इसे स्वीकार करने से पहले कृपया पुष्टि कर सकते हैं? :-) – Aubergine

+0

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

5

मैंने इस उपयोग के मामले में एक जावा परियोजना लागू की है। यह गिटहब, ओपन सोर्स पर है।

सबकुछ के लिए स्पष्टीकरण है (और यदि कुछ गुम है - मुझे बताएं ...https://github.com/OhadR/Authentication-Flows

इस ग्राहक वेब एप्लिकेशन को सभी स्पष्टीकरण के साथ README साथ Auth-प्रवाह का उपयोग करता है, यह है:)


एक नज़र डालें। यह आपको कार्यान्वयन का निर्देश देता है: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows

+0

ढूंढें क्या यह उत्पादन के उपयोग के लिए अनुकूलित करने के लिए पर्याप्त स्थिर है? – Kafkaesque

+0

यह एक अच्छा सवाल है। संक्षेप में: हाँ। ध्यान दें कि उत्पादन के लिए, प्रत्येक (आमतौर पर) की अपनी जरूरत होती है। उदाहरण के लिए, ऐसी कंपनियां हैं जिन्हें "गुप्त प्रश्न" तंत्र की आवश्यकता होती है, जिसे मैंने लागू नहीं किया था। लेकिन यह शुरू करने के लिए एक बहुत अच्छा आधार है, और जो भी आवश्यक है जोड़ने के लिए। रीडमे में एक नज़र डालें। अगर कुछ स्पष्ट नहीं है तो मुझे बताएं। और हाँ - यह स्थिर है :-) नोट: मैंने अपने जवाब में लिंक बदल दिए हैं। एक नज़र डालें .. – OhadR

+0

हाय @ ओहडआर: मैं आपकी परियोजना का जिक्र कर रहा हूं, यह मेरे लिए उपयोगी है, मुझे अपवाद मिला: प्रमाणीकरणफ्लोप्रोसेसरआईएमएल - प्रमाणीकरण विफल रहा; नेस्टेड अपवाद javax.mail.AuthenticationFailedException, UserActionController - खाता लॉक है या अस्तित्व में नहीं है, मैंने जांच की है और उपयोगकर्ता डेटा डीबी –