개발/Spring
Spring Security
코린이딱콩
2023. 2. 2. 14:58
🧐Spring Security 정의
- 스프링 기반의 애플리케이션 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임 워크
- 스프링 시큐리티는 인증과 인가에 대한 부분을 Filter의 흐름에 따라 처리하고 있다.
- Filter는 Dispatcher Servlet으로 가기 전에 적용되기 때문에 가장 먼저 URL 요청을 받는다.(웹 컨테이너에서 관리)
- Interceptor는 Dispatcher와 Controller 사이에 위치한다는 점에서 적용 시키의 차이가 있다.(스프링 컨테이너에서 관리)
💡Client(request) 👉🏻 Filter 👉🏻 DistpatcherServlet 👉🏻 Interceptor 👉🏻 Controller
👏🏻실제로 Intercpetor가 Controller로 요청을 위임하는 것은 아니고, Interceptor를 거쳐서 가는 것!
- Principla(접근 주체) : 보호된 리소스에 접근하는 대상
- Authentication(인증) : 접속된 유저가 누구인지 확인
- Authorize(인가) : 인증된 유저가 권한이 있는지 확인
- 권한 : 유저가 어떤일을 할 수 있도록 역할을 주는 것
👯Spring Secuirty 흐름
- 사용자가 로그인 정보와 함께 인증 요청 (HTTP Request)
- AuthenticationFilter 가 요청을 가로채고, 가로챈 정보를 통해 UsernamePasswordAuthenticationToken 의 인증용 객체를 생성
- AuthenticationManager의 구현체인 ProviderManager 에게 생성한 UsernamePasswordToken 객체를 전달
- AuthenticationManager 는 등록된 AuthenticationProvider 를 조회하여 인증을 요구
- 실제 DB에서 사용자 인증정보를 가져오는 UserDetailsService에 사용자 정보를 넘겨줌
- 넘겨받은 사용자 정보를 통해 DB에서 찾은 사용자 정보인 UserDetails 객체를 만듦
- AuthenticationProvider 는 UserDetails를 넘겨 받고 사용자 정보를 비교
- 인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체를 반환
- 다시 최초의 AuthenticationFilter 에 Authentication 객체가 반환됨
- Authentication 객체를 SecurityContext에 저장
👏🏻최종적으로 SecurityContextHolder는 세션 영역에 있는 SecurityContext에 Authentication 객체를 저장
🤦🏻♀️Spring Security 특징
- 애플리케이션의 모든 URL 에 대한 인증을 요구
- 인증, 인가 되지 않은 사용자는 Security Filter에서 걸러냄
- 시큐리티 내의 소스를 커스터마이징 할 수 있음
- CSRF 공격, 세션 고정 방지
- CSRF, 세션 고정 등 세션을 활용한 공격들을 방지
- HTTP 보안 헤더
- HTTP 헤더를 강화하여 XSS, X-Frame-Options 등에 대응
- HSTS(HTTP Strict Transport Security)
- WEB에 접근할 때, 강제적으로 HTTPS로 접근하도록 함
- XSS(Cross-Site Scripting) 보안
- 스크립트가 포함된 URL을 필터링
- HSTS(HTTP Strict Transport Security)
- HTTP 헤더를 강화하여 XSS, X-Frame-Options 등에 대응