2012-12-07 12 views
5

Pracuję nad starszą aplikacją sieciową opartą na Spring MVC, która wykorzystuje - według obecnych standardów - niewłaściwy algorytm mieszający. Teraz chcę stopniowo migrować wszystkie skróty do bcrypt. Moja strategia jest wysoki poziom:Jak zmienić algorytm hashowania hasła podczas korzystania z zabezpieczeń sprężynowych?

  • Nowe skróty są generowane z bcrypt domyślnie
  • Gdy użytkownik loguje się powodzeniem i ma nadal mieszania starszych, aplikacja zastępuje stary hash z nowym bcrypt hash.

Jaki jest najbardziej idiomatyczny sposób wdrożenia tej strategii w Spring Security? Czy powinienem używać niestandardowego filtru lub mojego programu AccessDecisionManager lub ...?

Odpowiedz

5

Prawdopodobnie będziesz musiał dostosować AuthenticationProvider ponieważ to właśnie tam hasło jest faktycznie porównywane z danymi użytkownika i masz wszystkie potrzebne informacje.

W metodzie authenticate należy najpierw wczytać dane użytkownika. Następnie sprawdź hasło dostarczone przez użytkownika zarówno w postaci BCryptPasswordEncoder, jak i starszej. Jeśli żaden z nich nie zwróci wyniku, rzuć BadCredentialsException.

Jeśli użytkownik pomyślnie się uwierzytelni (bardzo ważne :-)), a hasło jest w formacie starszym (starszy koder jest taki sam), należy wówczas wywołać dodatkowy kod, aby zaktualizować dane konta użytkownika i zamienić starszy skrót na bcrypt jeden. Do tworzenia nowych skrótów można również użyć BCryptPasswordEncoder.

Jeśli chcesz, możesz wykryć z góry, czy przechowywany hash był już bcrypt przed wykonaniem porównań. Łańcuchy Bcrypt mają dość wyraźny format.

Należy również pamiętać, że aby utrudnić odgadywanie prawidłowych nazw kont, należy postarać się, aby metoda zachowywała się tak samo, zarówno jeśli podana nazwa użytkownika istnieje, jak i gdy nie ma (pod względem czasu). Dlatego wywołaj kodery, nawet jeśli nie masz żadnych danych użytkownika dla podanej nazwy użytkownika.

0

myślę najlepszym sposobem, aby to zrobić, to podać hasło encoder, aby dostawcy uwierzytelniania niektóre rzeczy jak poniżej, aby uzyskać więcej informacji patrz 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

To wcale nie odpowiada na pytanie. Pyta, jak zmigrować istniejącą aplikację przy użyciu starszego formatu hasha do pliku za pomocą bcrypt. –

Powiązane problemy