Spring Security 의 런타임시 기본 동작하는 기능
Spring Security 를 적용하고 커스터마이징을 안한 기본상태에서 동작하는 기능이다.
- 모든 엔드포인트 ( /error 포함 ) 에 대해 인증된 사용자가 필요
- 시작 시 생성된 비밀번호로 기본 사용자를 등록 ( 비밀번호는 콘솔에 기록됨 )
- BCrypt 및 기타 기능으로 비밀번호 저장소를 보호함
- 양식 기반 로그인 및 로그아웃 로직 제공
- HTTP Basic 뿐만 아니라 Form 기반 로그인도 인증
- 웹 요청의 경우 로그인 페이지로 리다이렉션 및 서비스 요청의 경우 401 Unauthorized 를 제공함
- CSRF 공격 완화
- 세션 고정 공격 완화
- HTTPS를 보장하기 위해 엄격한 전송 보안을 작성함
- 스니핑 공격을 완화하기 위해 X-Content-Type-Options 를 작성함
- 인증된 리소스를 보호하는 캐시 제어 헤더를 작성함
- 클릭재킹을 완화하기 위해 X-Frame-Options 작성
- HttpServletRequest 의 인증 방법과 통합
- 인증 성공 및 실패 이벤트 게시
이를 달성하기 위해 SpringBoot 가 Spring Security 와 어떻게 조정되는지 살펴보자.
@EnableWebSecurity -- 1
@Configuration
public class DefaultSecurityConfig {
@Bean
@ConditionalOnMissingBean(UserDetailsService.class)
InMemoryUserDetailsManager inMemoryUserDetailsManager() { --2
String generatedPassword = // ...;
return new InMemoryUserDetailsManager(User.withUsername("user")
.password(generatedPassword).roles("ROLE_USER").build());
}
@Bean
@ConditionalOnMissingBean(AuthenticationEventPublisher.class)
DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(ApplicationEventPublisher delegate) { -- 3
return new DefaultAuthenticationEventPublisher(delegate);
}
}
1. @EnableWebSecurity 주석을 추가한다. ( 기본 Filter 체인을 @Bean 으로 제공 )
2. UserDetailSerivce 를 이용해서 콘솔에 기록되는 사용자 이름과 무작위로 생성된 비밀번호를 사용하여 게시한다.
3. 인증이벤트 게시를 위해 AuthenticationEventPublisher 를 게시한다.
Springboot 는 애플리케이션의 필터 체인에 Filter 로 게시된 모든 항목츨 추가한다. @Bean 이는 @EnableWebSecurity 와 함께 사용하면 모든 요청에 대해 Spring Security의 필터 체인을 자동으로 등록한다는 의미이다.
원본 링크
https://docs.spring.io/spring-security/reference/servlet/getting-started.html