Yeonnnnny

[TIL] 스프링 시큐리티 개념 및 흐름 본문

TIL

[TIL] 스프링 시큐리티 개념 및 흐름

yeonny_do 2025. 2. 12. 23:12

스프링 시큐리티의 기본 개념과 흐름에 대해 찬찬히 살펴보고자 한다.

 

1. Spring Security

 

스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티를 이해하기 위해서는 인증과 인가에 대한 개념을 확실히 이해하는 것이 중요하다.

 

💡인증

인증(Authentication)은 사용자의 신원을 입증하는 과정이다. 예를 들어 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정을 인증이라고 한다.

 

💡인가

인가(Authorization)은 인증과는 다르다. 인가는 사이트의 특정 부분에 접근할 수 있는지 권한을 확인하는 작업이다. 예를 들어 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없다. 이렇듯 권한을 확인하는 과정을 인가라고 한다.

 

 

스프링 시큐리티

스프링 기반의 애플리케이션의 보안을 담당하며, 보안 관련 옵션을 많이 제공한다. 그리고 애너테이션 설정도 매우 쉽다. CSRF 공격, 세션 고정 공격을 방어해주고, 요청 헤더도 보안 처리를 해주어 보안 관련 개발을 해야하는 부담을 줄여 준다.

 

❓CSRF : 사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격

❓세션 고정 공격(session fixation) : 사용자의 인증 정보를 탈취하거나 변조하는 공격

 

그리고, 스프링 시튜리티는 필터 기반으로 동작한다. 

 

 

스프링 시큐리티는 다양한 필터로 나누어져 있으며, 각 필터에서 인증, 인가와 관련된 작업을 처리한다.

 

SecurityContextPersistenceFilter부터 시작해서 아래로 내려가며 FilterSecurityInterceptor까지 순서대로 필터를 거친다. 필터를 실행할 깨는 화살표로 연결된 오른쪽 박스의 클래스를 거치며 실행한다. 

 

가장 자주 사용할 만한 필터는  회색으로 칠한  UsernamePasswordAuthenticationFilter 와 FilterSecurityInterceptor이다. 

UsernamePasswordAuthenticationFilter는 아이디와 패스워드가 넘어오면 인증 요청을 위임하는 인증 관리자 역할을 한다. FilterSecurityInterceptor는 권한 부여 처리를 위임해 접근 제어 결정을 하는 접근 결정 관리자 역할을 한다.

 

가장 많이 사용하는 아이디와 패스워드 기반 폼 로그인을 시도하면, 스프링 시큐리티에서는 어떤 절파로 인증을 처리하는 지 흐름도를 보면서 이해해보자 !! 

 

 

 

 

  1. 사용자가 아이디와 패스워드를 입력하면, HTTPServletRequest에 아이디와 비밀번호 정보가 전달된다. 이때 AuthenticationiFilter가 넘어온 아이디와 비밀 번호의 유효성을 검사한다.
  2. 유효성 검사가 끝나면 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨준다.
  3. 전달 받은 인증용 객체인 토큰을 Authentication Manager에게 보낸다. 
  4. 그 토큰을 AuthenticationProvide에게 보낸다.
  5. 사용자 아이디를 UserDetailService에 보낸다. UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails 객체로 만들어 AuthenticationProvider에게 전달한다.
  6. DB에 있는 사용자 정보를 가져온다.
  7. 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리를 한다.
  8. ~ 10. 인증이 완료되면 SecurityContextHolder에 Authentication을 저장한다. 인증 성공 여부에 따라 성공하면 AuthenticationSuccessHandler, 실패하면 AuthenticationFailureHandler를 실행한다.

 

물론 저 순서를 모두 외워야 하는 것은 아니지만, 이러한 흐름으로 로그인이 동작하는지 이해를 하고 있다면 Spring Security로 보안관련 개발을 할 때 많이 도움이 될 것 같다 !!!