czwartek, 25 lutego 2010

Uwierzytelnianie w Spring Security z użyciem haseł zakodowanych funkcją MD5

Kolejny wpis dotyczący Spring Security. Tym razem do skonfigurowania jest aplikacja która podczas logowania użytkownika korzysta z haseł zapisanych po wcześniejszym zakodowaniu ich algorytmem MD5. Oczywiście będzie to dość proste i szybkie w skonfigurowaniu:)

Praktycznie jedynym co musimy zrobić to trochę zmodyfikować kontekst bezpieczeństwa aplikacji pliku w XML. W pierwszej kolejności należy dodać ziarno które będzie odpowiadać za tworzenie skrótu z hasła, będzie nim obiekt Md5PasswordEncoder:
<beans:bean id="passwordEncoder" 
        class="org.springframework.security.providers.encoding.Md5PasswordEncoder"/>
Następnie to ziarno musi być przypisane do beana odpowiedzialnego za uwierzytelnianie:
<beans:bean id="daoAuthenticationProvider"
 class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
 ...
 <beans:property name="passwordEncoder" ref="passwordEncoder"/>
 <beans:property name="saltSource"><beans:null/></beans:property>
        ...
</beans:bean>
W tym przykładzie nie używana jest sól, która może wpłynąć na poprawę bezpieczeństwa skrótu. Jeśli ktoś chce zwiększyć bezpieczeństwo powinien z niej skorzystać.
Algorytm kodowania może być w bardzo prosty sposób zmieniony, poprzez zmianę klasy Md5PasswordEncoder na inną (MD5 nie jest już zbyt bezpieczny:). Jeśli chcielibyśmy użyć algorytmu SHA-1 wtedy klasa ShaPasswordEncoder będzie bardziej pomocna.

Warto używać tego samego algorytmu do autoryzacji jak i do kodowania hasła przy zapisie do bazy danych. W przypadku MD5 (bez soli) poniższa metoda wykonuje to zadanie używając bibliotek Springowych:
public String encodePassword(final String password) {
    final Md5PasswordEncoder encoder = new Md5PasswordEncoder();
    // drugi parametr to źródło 'soli'
    return encoder.encodePassword(password, null);
}
Dla osób nie znających jeszcze Spring Security ponownie polecam wpis na blogu Mateusza Zięby -> Bezpieczeństwo szybko, łatwo i przyjemnie czyli wstęp do Spring Security :)

Brak komentarzy:

Prześlij komentarz