2012-12-07 11 views
5

मैं एक विरासत स्प्रिंग एमवीसी आधारित वेब एप्लिकेशन पर काम कर रहा हूं जो वर्तमान मानकों द्वारा अनुचित हैशिंग अनुचित एल्गोरिदम। अब मैं धीरे-धीरे सभी हैश को bcrypt में माइग्रेट करना चाहता हूं। मेरे उच्च स्तर की रणनीति है:वसंत सुरक्षा का उपयोग करते समय पासवर्ड हैशिंग एल्गोरिदम कैसे बदलें?

  • नए हैश डिफ़ॉल्ट
  • द्वारा bcrypt साथ उत्पन्न कर रहे हैं जब एक उपयोगकर्ता को सफलतापूर्वक में लॉग करता है और अभी भी एक विरासत हैश है, ऐप्स नए bcrypt हैश के साथ पुराने हैश बदल देता है।

वसंत सुरक्षा के साथ इस रणनीति को लागू करने का सबसे बेवकूफ तरीका क्या है? क्या मुझे कस्टम फ़िल्टर या AccessDecisionManager पर या ... का उपयोग करना चाहिए?

उत्तर

5

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

authenticate विधि में, आप पहले उपयोगकर्ता डेटा लोड करेंगे। फिर BCryptPasswordEncoder और अपनी विरासत दोनों के साथ उपयोगकर्ता द्वारा प्रदान किए गए पासवर्ड की जांच करें। यदि न तो कोई मैच लौटाता है, तो BadCredentialsException फेंक दें।

यदि उपयोगकर्ता सफलतापूर्वक प्रमाणित करता है (बहुत महत्वपूर्ण :-)) और पासवर्ड विरासत प्रारूप (विरासत एन्कोडर मिलान हुआ) है, तो आप उपयोगकर्ता के खाता डेटा को अपडेट करने के लिए कुछ अतिरिक्त कोड कॉल करेंगे और विरासत हैश को एक bcrypt से प्रतिस्थापित करेंगे एक। BCryptPasswordEncoder का उपयोग नए हैंश बनाने के लिए भी किया जा सकता है।

यदि आप चाहते हैं, तो आप पहले से पता लगा सकते हैं कि संग्रहीत हैश तुलना करने से पहले पहले से ही बीक्रिप्ट किया गया था या नहीं। Bcrypt तारों का एक अलग प्रारूप है।

ध्यान दें कि वैध खाता नामों को अनुमानित करना कठिन बनाने के लिए, आपको विधिवत उपयोगकर्ता नाम मौजूद होने पर विधि को व्यवहार करने की कोशिश करनी चाहिए और जब ऐसा नहीं होता है (उस समय के मामले में)। इसलिए एन्कोडर्स को तब भी कॉल करें जब आपके पास आपूर्ति किए गए उपयोगकर्ता नाम के लिए कोई उपयोगकर्ता डेटा न हो।

0

मुझे लगता है कि यह करने के लिए सबसे अच्छा तरीका है पासवर्ड एनकोडर प्रमाणीकरण प्रदाता के लिए अधिक जानकारी के लिए नीचे दिए गए जैसे कुछ बात निर्दिष्ट करने के लिए उल्लेख है doc

<authentication-manager> 
    <authentication-provider user-service-ref="userService"> 
     <password-encoder ref="passwordEncoder"> 
      <salt-source ref="saltSource" /> 
     </password-encoder> 
    </authentication-provider> 
</authentication-manager> 


<beans:bean  class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" 
    id="passwordEncoder" /> 

<beans:bean  class="org.springframework.security.authentication.dao.ReflectionSaltSource" 
    id="saltSource"> 
    <beans:property name="userPropertyToUse" value="userName" /> 
</beans:bean> 
+0

यह सवाल का जवाब नहीं देता है। यह पूछ रहा है कि एक विरासत हैश प्रारूप का उपयोग करके किसी मौजूदा ऐप को bcrypt का उपयोग करके माइग्रेट करना है। –

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