spring-boot-starter-security
- 스프링 부트에서 제공하는 스프링 시큐리티 관련 의존성을 모두 함께 묶어놓은 스타터(참고)
스프링 시큐리티
- 자바 어플리케이션에 인증(authentication)과 인가(authorization)기능 제공을 목적으로 만들어진 프레임워크(참고)
인증과 인가
- 인증(authentication) : 요청을 한 사용자가 어플리케이션이 알고있는 바로 그 사용자인지 판단
- 인가(authorization) : 요청을 한 사용자가 해당 요청을 실행할 권한이 있는 사용자인지 판단
스프링 시큐리티의 특징
- 인증 및 인가 기능 제공
- session fixation, clickjacking, cross site request forgery등의 공격에 대한 보호
- session fixation(세션 고정)
- 로그인 시 발급받은 세션 ID가 로그인 전/후 모두 동일하게 사용되어 악의적인 사용자가 피해자의 세션을 탈취하여 사용자로 위장 접근하는 행위(참고)
- 세션 타임아웃 감지 및 동시에 가질수 있는 세션의 수 제한(참고)
- clickjacking
- 사용자가 감춰진 링크를 클릭하게함으로써 의도되지 않은 행동을 수행하도록 하는 행위(참고)
- HTTP Response에 Content-Security-Policy를 설정하여 전달(참고)
- cross site request forgery(사이트간 요청 위조)
- Servlet API에 대한 통합 제공
- 선택적인 Spring Web MVC와의 통합 제공
Content-Security-Policy
- 주어진 페이지에서 실행할 수 있는 리소스에 대한 정책 전달
- Syntax
Content-Security-Policy: <policy-directive>; <policy-directive>
Synchronizer Token Pattern
- 서버측에서 생성되는 토큰
- 요청시 새로 생성하여 사용자에게 전달 및 토큰 검증
- 고려해야할 부분
- 브라우저의 뒤로가기 버튼을 클릭한 경우 토큰을 잃어버리는 문제 발생 가능
스프링 시큐리티 구조 및 동작(참고)
- 서블릿 필터들로 구성된 체인 형태의 구조
- Spring MVC와 분리되어 동작
서블릿 필터
- Http Request의 전달 순서
- 브라우저 -> DispatcherServlet(Tomcat) -> @Controller || @RestController
- 브라우저와 DispatcherServlet 사이에 서블릿 필터를 추가하여 인증과 인가 수행
- 필터 체인
- 인증과 인가와 관련된 기능을 나누어 체인으로 구성
주요 필터
- BasicAuthenticationFilter
- Http 요청에서 기초적인 Auth헤더를 확인
- Auth헤더 확인한 경우 사용자명, 비밀번호를 이용하여 인증 진행
- UsernamePasswordAuthenticationFilter
- 파라미터 또는 POST 바디에서 사용자명, 비밀번호 확인
- 사용자명, 비밀번호 확인한 경우 인증 진행
- DefaultLoginPageGeneratingFilter