Spring Security란?

Hyunsoo Kim·2024년 8월 7일
0

스프링

목록 보기
11/13
post-thumbnail

Spring Security란?

Spring security는 인증, 권한 관리, 데이터 보호 기능을 포함하여 웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는 데 도움을 주는 프레임워크다. 일반적으로 로그인, 로그아웃, 세션 관리, 권한 등 플랫폼에 맞춰 작업되는 인가&보안 기능을 효율적이고 신속하게 구현할 수 있도록 도와준다.

특히 Spring Security는 IoC/DI 패턴과 같은 확장 패턴을 염두해서 인증, 인가 부분을 개발할 수 있기 때문에 개발 작업 효율을 높일 수 있다.

또한 Spring Security는 Filter를 기반으로 동작하기 때문에 Spring MVC와 분리되어 관리하고 동작할 수 있으며, bean으로 설정할 수 있어 3.2 부터는 XML 설정을 이용하지 않아도 된다는 장점이 있다.


Spring Security 아키텍처

  1. 사용자의 요청이 서버로 들어온다.
  2. Authorication Filter가 요청을 가로채고 Authotication Manager로 요청을 위임한다.
  3. Authotication Manager는 등록된 Authotication Provider를 조회하며 인증을 요구한다.
  4. Authotication Provider가 실제 데이터를 조회하여 UserDetails 결과를 돌려준다.
  5. 결과는 SecurityContextHolder에 저장되어 유저정보를 Spring Controller에서 사용할 수 있게 된다.

Spring Security가 작동하는 내부 구조

  1. 사용자가 자격 증명 정보를 제출하면 AbstractAuthenticationProcessingFilter가 Authentication 객체를 생성한다.
  2. Authentication 객체가 AuthenticationManager에게 전달된다.
  3. 인증에 실패하면 로그인한 유저정보가 저장된 SecurityContextHolder의 값이 지워지고 RememberMeService.joinFail()이 실행된다. 그리고 AuthenticationFailureHandler가 실행된다.
  4. 인증에 성공하면 SessionAuthenticationStrategy가 새로운 로그인이 되었음을 알리고 Authentication이 SecurityContextHolder에 저장된다. 이후에 SecurityContextPersistenceFilter가 SecurityContext를 HttpSession에 저장하면서 로그인 세션 정보가 저장된다.
  5. 이후 RemeberMeServices.loginSuccess()가 실행된다. ApplicationEventPublisher가 InteractiveAuthenticationSuccessEvent를 발생시키고 AuthenticationSuccessHandler가 실행된다.

Spring Security 사용하기

Spring Security 기본 세팅 방법을 알아보자. 참고로 Gradle을 사용하고 있다.

Dependencies 설정하기

implementation("org.springframework.boot:spring-boot-starter-security")

SpringBoot 실행 후 생성된 비밀번호 확인

Console Log: Using generated security password: 3690b8e3-9113-414d-9833-871732483201d

기본 세팅 id는 'user'이고 pw는 로그에 생성된 비밀번호를 입력하면 된다.

Config 파일 생성

아래 코드는 요청되는 모든 URL을 허용하겠다는 의미이다. 이는 필요한 경우 조건을 수정하여 사용할 수 있다.

아키텍처에서 보듯이 모든 요청을 Filter가 가로채서 인증, 인가 부분을 체크하고 난 다음 흐름으로 이어지게 된다. 때문에 관련 설정이 간단해지고 내부 비즈니스 로직에는 영향을 덜 미치게 된다.

@RequiredArgsConstructor
@Configuration
@EnableWebSecurity
public class WebSecurityConfig{

    @Bean
    Public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    	http.authorizeHttpRequests((authorizeRequests) ->
        				authorizeRequests.anyRequests().permitAll()
        );
        return http.build();
   }

참고자료: Spring Security란? 사용하는 이유부터 설정 방법까지 알려드립니다!

profile
다부진 미래를 만들어가는 개발자

0개의 댓글