[Spring Security] HTTP Basic Authentication - Spring Boot (2)

반응형

이번 글에서는 Spring Boot App에 HTTP Basic Authentication을 적용하는 방법에 대해 알아보도록 하겠습니다.

1. HTTP Basic Authentication

이번에는 이전글에서 생성한 spring boot app에 HTTP Basic Authentication을 적용해보도록 하겠습니다.

1-1) overall

HTTP Basic Authentciation은 spring-security에서 제공해주는 default configuartion이 아니므로, 사용자가 직접 아래와 같이 custom security configuration을 생성해야 합니다.

SecurityConfiguration

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("minholee93").password(passwordEncoder().encode("minholee93")).roles("ADMIN")
                .and()
                .withUser("minholee").password(passwordEncoder().encode("minholee")).roles("USER");

    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }

    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

위의 코드를 하나씩 해석해보면 다음과 같습니다.

• @Configuartion과 @EnableWebSecurity 어노테이션을 작성해, security에 사용할 configuration 임을 명시합니다.

• custom security configuration을 사용하기위해 WebSecurityConfigurerAdapter를 상속하고, configure 메서드를 @Override 합니다.

1-2) AuthenticationManagerBuilder

configure(AuthenticationManagerBuilder auth)

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("minholee93").password(passwordEncoder().encode("minholee93")).roles("ADMIN")
                .and()
                .withUser("minholee").password(passwordEncoder().encode("minholee")).roles("USER");

    }

• inMemoryAuthentication( ) : user와 password 정보를 h2와 같은 in memory에 저장합니다.

• minholee93 user의 password를 minholee93으로 설정하고, 해당 password를 password encoder로 encode합니다. 또한, minholee93의 ROLE을 ADMIN으로 설정합니다.

• minhole user의 password를 minholee으로 설정하고, 해당 password를 password encoder로 encode합니다. 또한, minholee의 ROLE을 USER로 설정합니다.

1-3) HttpSecurity

configure(HttpSecurity http)

 @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }

• authorizeRequests( ).anyRequest( ).authenticated( ) : 모든 http reqeust는 인증된 사용자만 접근할 수 있도록 합니다.

• httpBasic( ) : 사용자 인증방법으로는 HTTP Basic Authentication을 사용합니다.

1-4) PasswordEncoder

passwordEncoder( )

@Bean
PasswordEncoder passwordEncoder(){
    return new BCryptPasswordEncoder();
}

• passwordEncoder( ) : custom security configuration에서 사용할 password encoder를 BCryptPasswordEncoder로 정의합니다.

• @Bean : password encoder를 @Bean으로 등록해, project 내부 어느곳에서나 사용할 수 있도록 정의합니다.

2. Test

이제 어플리케이션을 실행해보겠습니다.

위와 같이 더이상 spring security가 제공해주는 login 페이지로 이동하지 않으며, browser가 사용자에게 직접 name과 password를 묻는것을 확인할 수 있습니다.

HTTP Basic Authentication은 browser가 사용자 인증을 진행합니다. 😎

팝업창에 앞서 생성한 user 정보와 password를 입력하면, 아래와 같이 app으로 입장하는 것을 확인할 수 있습니다.


참고 자료 : https://www.youtube.com/playlist?list=PLVApX3evDwJ1d0lKKHssPQvzv2Ao3e__Q


추천서적

 

스프링5 레시피:스프링 애플리케이션 개발에 유용한 161가지 문제 해결 기법

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY