Spring Security Salz Konfiguration mit MD5 die Verwendung der basic-String-Objekt
Ich habe dieses forum und die docs, aber fand keine Antwort auf diese Frage ist, wie kann ich einen basic-Spring Security-Konfiguration setup mit einem einfachen java-Objekt als Salz für die MD5-Codierung?
Ist hier mein Spring Security-Kontext snippet Konfiguration:
<beans:bean id="saltSource" class="com.myproject.sec.util.MyString" scope="singleton" >
<beans:constructor-arg value="12345" />
</beans:bean>
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userService">
<password-encoder hash="md5">
<salt-source ref="saltSource" />
</password-encoder>
</authentication-provider>
</authentication-manager>
...aber diese Konfiguration wird eine unerwünschte Fehler Ausnahme beschweren, dass das Salz die Quelle ist nicht in der org.springframework.Sicherheit.die Authentifizierung.dao.SaltSource-Schnittstelle, aber ich will nicht zu verwenden, eine Eigenschaft von Benutzerdaten wie mein Salz (da diese Schnittstelle unterstützt Benutzer-Details), sondern meine eigene String-Objekt, wie oben dargelegt. Wie mache ich das erreichen?
Auch, als eine zweite, eng damit verbundene Frage, ich weiß, ich kann das Salz als Benutzername wie hier:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userService">
<password-encoder hash="md5">
<salt-source user-property="username"/>
</password-encoder>
</authentication-provider>
</authentication-manager>
und, haben eine system weite Feste Salz von "12345" wie folgt:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userService">
<password-encoder hash="md5">
<salt-source system-wide="12345"/>
</password-encoder>
</authentication-provider>
</authentication-manager>
...aber wie bekomme ich das Salz als eine Verkettung von Benutzername und systemweite Konstante "12345", z.B. wenn der Benutzername ist " fred, die Salz als "fred12345" ohne Rückgriff auf übergeordnete umsetzen meiner eigenen Codierung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bitte nicht mit MD5-hash-Passwörter, es ist sehr leicht zu knacken.
Verwenden, Spring Security ist newish BCryptPasswordEncoder. Es behandelt Salzen für Sie (und speichert den hash und Salz in der gleichen Spalte db):
http://docs.spring.io/spring-security/site/docs/current/apidocs/org/springframework/security/crypto/bcrypt/BCryptPasswordEncoder.html
Hier ist meine Antwort auf die einfache Art und Weise, es zu tun:
Spring Security mit Rollen und Berechtigungen
Wenn Sie wollen Salz sein username + "12345", können Sie implementieren Ihre eigenen SaltSource (es ist leicht):
Dann:
Und als Neil McGuigan sagte in der Antwort oben, versuchen Sie nicht, verwenden Sie MD5-oder single-pass-SHA - es ist besser, verwenden Sie BCrypt oder SCrypt aus den erklärten Gründen hier: https://security.stackexchange.com/questions/8607/how-quickly-can-these-password-schemes-really-be-beaten
Es wird empfohlen, die StandardPasswordEncoder, dass der Frühling Sicherheit bietet. Es wird automatisch Griff den Salzen für Sie. Es verwendet auch eine viel stärkere SHA256-hash.
http://docs.spring.io/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/crypto/password/StandardPasswordEncoder.html