HTTP Basic Authentication to podstawowy i chyba najprostszy sposób zabezpieczenia aplikacji przed światem zewnętrznym. W tym poście zapiałem kilka niezbędnych notatek dotyczących HTTP Basic Auth w Springu. Mogą się one wydawać porozrzucane, ale zapisuje je tak, jak uczę się ich sam i buduję swój system zabezpieczeń z użyciem Spring Security HTTP Basic Authentication. Wskakuj jeżeli chcesz i zobacz jakie materiały przygotowałem sobie na temat zabezpieczeń w Springu i samego HTTP Basic Authentication i Authorization.

Na wstępię chciałbym dodać, iż nie jest to wyczerpujący artykuł na temat Spring Security czy HTTP Basic Authentication w Springu. Jest to raczej podsumowanie aka pewnego rodzaju cookbook w tej materii. Sam, w wieku 41 zaczynam się uczyć Springa i przelewanie tego czego się nauczyłem na ‘papier’ (choćby taki elektroniczny jak tutaj), pozwala mi lepiej zapamiętać i utrwalić zdobyte wiadomości. 

Jak Działa Uwierzytelnianie w Spring Security

 

Jak dziala Spring Security daigram HTTP Basic Authentication

źródło obrazka powyżej : Spring Security in Action (Manning)

Krótki opis flow w Spring Security

Jest wiele poziomów na jakich można ‘wkroczyć’ w implementację spring security. Można to zrobić praktycznie w każdym z wyżej widocznych elementów, który jest niezależną klasa lub interfejsem. Można użyć standardowej uwierzytelniania lub wpłynąć na jego flow.

Interfejs UserDetailsService zajmuje się jedynie ‘wydobywaniem’ użytkownika po jego ‘username’.

Za to interfejs UserDetailsManager rozbudowuje tą funkcjonalność poprzez dodanie metod takich jak

  • createUser (UserDetails userDetails) : void
  • updateUser (UserDetails userDetails) : void
  • deleteUser (String username): void
  • changePassword (String v1, String v2): void
  • userExists (String username) : boolean

Jak zaimplementować HTTP Basic Authentication w Spring Security

Aby zacząć manipulować Spring Security najlepiej zacząć od modyfikacji czy własnej implementacji Beanów realizujących interfejsy UserDetailsService oraz PasswordEncoder .

Te 2 beany to tak jakby ‘mięcho i ziemniaczki’ w pierwszym daniu jakie skonsumujesz pracując ze Spring Security.

Własna Implementacja UserDetailsService i PasswordEncoder

Aby je zaimplementować, najprościej jest stworzyć klasę konfiguracyjną i dodać w niej 2 metody tworzące beany zwracające obiekty realizujące te dwa interfejsy.

 

@Configuration
public class UserManagementConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        /* UserDetailsService is resp. ONLY for retrieving user by username */
        /* UserDetailsManager extends it by modif., del., pass.change, update etc */
        UserDetailsManager userDetailService = new InMemoryUserDetailsManager();
        /* Describing the user */
        UserDetails user = User.withUsername("john")
                .password("123456")
                .authorities("read")
                .disabled(false)
                .build();


        userDetailService.createUser(user);
        return userDetailService;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }

}

Można już sprawdzić jak działa aplikacja poprzez próbę wywołania w przeglądarce adresu endpointu któregoś z kontrolerów. Można także użyć POSTMANA czy curl’a .

$ curl --user john:123456 http://localhost:8080/endpoint_tutaj -i

Seweryn

Cześć. Mam na imię Seweryn i jestem związany z IT już od lat 90. Jest to moje hobby i stała, która towarzyszy mi i chyba będzie do końca życia. Najbardziej interesują mnie takie dziedziny jak programowanie, bazy danych, analiza danych, web design. Posiadam kilka certyfikatów rozpoznawalnych w "przemyśle IT". M. in. Certified Oracle Java 8 Associate, Certified Amazon Cloud Practitioner, Certified Python Programmer. Mam także Professional Diploma in Digital Marketing oraz Certyfikat Data Analysis for Management z LSE : London School of Economics and Political Science

0 Komentarzy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *