Spring Security

김채영·2023년 12월 11일

프레임워크

목록 보기
2/3

스프링 시큐리티란?

자바기반의 웹 응용 프로그램 및 서비스에서 보안 관련 기능을 처리하기 위한 프레임 워크
웹 애플리케이션에서 사용자 인증 및 권한 부여와 같은 보안 관련 작업을 쉽게 처리할 수 있도록 도와준다.

  • 인증(Authentication) : 사용자가 시스템에 누구인지 확인하는 과정
  • 인가(Authorization) : 사용자가 특정 리소스에 대해 어떤 작업을 수행할 수 있는지 결정하는 과정
  • 보안 필터(Security Filter) : 필터 체인을 사용하여 다양한 보안 작업을 처리
  • 세션 관리 : 사용자 세션 관리와 세션 타임아웃, 세션 보호와 같은 보안 관련 기능 지원
  • CSRF : 웹 에플리케이션에서 CSRF 공격을 방어하기 위한 기능 제공
  • SSL : 애플리케이션에서 SSL을 설정하고 관리하는 기능을 지원
CSRF란? 
Cross Site Request Forgery로 사이트 간 위조 요청
공격자가 인증된 브라우저에 저장된 쿠키의 세션 정보를 활용하여 웹 서버에
사용자가 의도하지 않은 요청을 전달하는 것으로 정상적인 사용자가 의도치
않은 위조 요청을 보내는 것을 의미

스프링 시큐리티 특징

  • 보안과 관련하여 체계적으로 많은 옵션을 제공하여 편리하게 사용
  • Filter 기반으로 동작하여 MVC와 분리하여 관리 및 동작
  • 어노테이션을 통한 간단한 설정
  • Spring Security는 기본적으로 세션과 쿠키방식으로 인증
  • 인증 관리자와 접근 결정 관리자를 통해 사용자의 리소스 접근을 관리
  • 인증 관리자는 UsernamePasswordAuthenticationFilter, 접근 결정 관리자는 FilterSecurityInterceptor가 수행

스프링 시큐리티 흐름


1. 사용자가 로그인 정보로 로그인을 요청
2. AuthenticationFilter가 사용자 정보를 인터섹트하여 UsernamePasswordAuthenticationToken을 생성하여 AuthenticationManager에게 Authentication 객체를 전달
3. AuthenticationManager 인터페이스를 거쳐 AuthenticationProvider에게 (2)번의 정보를 전달, 등록된 AuthenticationProvider을 조회하여 인증을 요구
4. AuthenticationProvider는 UserDetailsService를 통해 입력받은 (3)의 사용자의 정보를 DB에 조회
5. AuthenticationManager는 Authentication 객체를 AuthenticationFilter로 전달
6. AuthenticationFilter는 전달받은 Authentication 객체를 LoginSuccessHandler로 전송하고, SecurityContextHolder에 담음
7. 성공 시 AuthenticationSuccessHandle, 실패 시 AuthenticationFailureHandle 실행

스프링 시큐리티 적용

1) build.gradle 의존성

implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

2) config

WebSecurityConfigurerAdapter는 deprecated 되었기 때문에 FilterChain의 역할을 하는 메소드를 직접 구현하여 Bean으로 등록해 주어야 함.

참고자료

https://thalals.tistory.com/436

profile
백엔드 개발⭐

0개의 댓글