본문 바로가기
백엔드

⚠️ 스프링 시큐리티(Spring Security)와 그 작동 구조

by 더하리 2024. 10. 5.

 

스프링 시큐리티란?

 

Spring Security인증(Authentication), 인가(Authorization), 권한 관리, 데이터 보호 기능을 포함해 웹 개발과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는 Spring의 프레임워크이다.

 

Spring을 공부하면서 여러번 들어봤을 IoC/DI 패턴!

프레임워크 없이 직접 코드로 작성할 경우 해당 패턴을 직접 개발하기는 쉽지 않으며 Spring Security에서 해당 기능을 제공해주기 때문에 개발 작업 효율을 높일 수 있다고 한다. 

 

 

Spring Security 아키텍처

 

빨간 부분이 시큐리티 적용되는 부분 (출처: https://www.elancer.co.kr/blog/view?seq=235)

 

1. 사용자의 요청이 서버로 들어온다.

2. Authotication Filter가 요청을 가로채 Authotication Manager로 요청을 위임한다.

3. Authotication Manager는 등록된 Authotication Provider를 조회하며 인증을 요구한다.

4. Authotication Provider가 실제 데이터를 조회해 UserDetails결과를 돌려준다.

5. 해당 결과는 SecurityContextHolder에 저장되어 저장된 유저정보를 Spring Controller에서 사용할 수 있게 된다.

 

 

Spring Security가 작동하는 내부 구조

 

출처: https://www.elancer.co.kr/blog/view?seq=235

 

1. 사용자가 자격 증명 정보를 제출하면, AbstractAuthenticationProcessingFilterAuthentication객체를 생성한다. 

2. 해당 객체는 AuthenticationManager에게 전달된다.

3. 이제 인증에 실패할 경우와 성공할 경우 다른 로직으로 흘러간다.

3-a) 실패할 경우

   1) 로그인한 유저 정보가 저장된 SecurityCotextHolder값이 지워지며 RememberMeService.joinFail()이 실행되고 AuthenticationFailureHandler가 실행된다.

3-b) 성공할 경우

   1) SessionAuthenticationStrategy가 새로운 로그인이 되었음을 알리고 Authentication이 SecurityContextHolder에 저장이 된다.

   2) 이후에 SecurityContextPersistenceFilterSecurityContextHttpSession에 저장하며 로그인 세션 정보가 저장된다.

   3) RememerMeServices.loginSuccess() → ApplicationEventPublisher → InteractiveAuthenticationSuccessEvent → AuthenticatonSuccessHandler 순으로 실행된다.

 

 

이러한 과정을 몰라도 구현을 할 수 있으나 Spring Security의 작동 구조를 알고 있으면 작업을 빠르게 진행하거나 업무 효율을 더 올릴 수 있다고 한다.

 

 

추가적인 적용 코드는 실습을 통해 따라해보며 게시글에 추가 수정하여 업로드할 예정이다 :)

 

 

*출처*

 

Spring Security란? 사용하는 이유부터 설정 방법까지 알려드립니다! I 이랜서 블로그

홈페이지에 인증 및 권한 기능을 빠르게 부여해 인증 및 권한 보호 기능을 손쉽게 추가할 수 있는 Spring의 프레임워크 중 하나인 ‘Spring Security’에 대해 이랜서에서 자세히 알려드립니다. I spring

www.elancer.co.kr

 

 

[Spring] 공식문서를 기반으로 스프링 시큐리티(Spring Security) 기본 개념과 구조 파악하기

공식문서에 기반하여 스프링 시큐리티 개념과 아키텍처를 학습해보았다.

velog.io