이번 글에서는 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
추천서적
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'Spring > Security' 카테고리의 다른 글
[Spring Security] Authority Based Authorization - Spring Boot (4) (0) | 2020.09.08 |
---|---|
[Spring Security] Role Based Authorization - Spring Boot (3) (0) | 2020.09.08 |
[Spring Security] Default Configuration - Spring Boot (1) (0) | 2020.09.08 |
[Spring Security] SSL & HTTPS (0) | 2020.09.08 |
[Spring Security] JWT Authentication (0) | 2020.09.08 |