Spring security 구조

May 11, 2024
Spring security 구조
 
 

Spring Security 란?

Spring MVC 기반 애플리케이션의 인증(Authentication) 및 인가(Authorization or 권한 부여) 기능을 지원하는 보안 프레임워크.
Spring 기반 애플리케이션 보안을 위한 사실상의 표준
쓰는이유?
→ Spring Security는 보안과 관련하여 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 이런 보안 로직들을 하나하나 작성할 필요가 없는 장점이 존재
 
 

Spring FilterChain

Spring security는 다양한 기능을 가진 필터들을 10개 이상 기본적으로 제공한다.
이렇게 제공되는 필터들을 Security Filter Chain이라고 한다.
Spring Security에서는 필터를 통해 전, 후처리 과정에서 보안작업을 수행가능하다.
Filter는 Dispatcher Servlet으로 가기 전에 적용되기 때문에 가장 먼저 url의 요청을 받는다.
 
 

Spring Security 구조

notion image
 
  1. 사용자가 로그인 정보 입력 후 HttpRequest를 서버로 전송
  1. 전송이 오면 AuthenticationFilter로 요청이 오고 아이디, 비밀번호 기반으로 UserPasswordAuthenticationToken을 발급해주어야 한다.
  1. 2에서 발급된 토큰을 AuthenticationManager에게 전달한다. AuthenticationManager는 인증 처리를 위한 여러개의 AuthenticationProvider를 가지고 있다.
  1. 2의 토큰을 AuthenticationProvider에게 전달한다. AuthenticationManager는 토큰을 순차적으로 Provider에게 전달하여 실제 인증 과정을 수행한다. 실제 인증에 대한 부분은 Authenticate함수에 작성을 해야하고 Security에서는 DB에서 데이터를 조회할 때 Username으로 조회하기 때문에 전달받은 토큰으로부터 아이디 조회, 비밀번호 일치를 확인한다.
  1. UserDetailsService로 조회할 아이디 전달한다. UserDetailsService는 인터페이스라서 이를 구현할 클래스를 작성해야하며 여기서 아이디를 기반으로 데이터를 조회해야 한다.
  1. 아이디를 기반으로 DB에서 데이터를 조회한다.
  1. 조회한 결과를 반환한다.
  1. 인증 처리 후 토큰을 AuthenticationManager에 반환, AuthenticationProvider에서 UserDetailsService를 통해 조회한 정보와 입력받은 비밀번호가 일치하는지 확인하고 일치한다면 인증된 토큰을 반환해야 한다. DB에 비밀번호는 보통 암호화 되어있기 때문에 똑같이 암호화 후 비교.
  1. 인증된 토큰을 AuthenticationFilter에 전달, 인증이 완료된 UserPasswordAuthenticationTokenAuthenticationFilter로 반환하고 AuthenticationFilterLoginSuccessHandler로 전달한다.
  1. 인증된 토큰을 SecurityContextHolder에 저장한다.
 
 
 
 
 
 
 
Share article

neeke