Spring Security?
- 스프링 기-반의 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크
- 서블릿 필터와 이들로 구성된 필터 체인으로의 위임 모델을 사용
- 보안과 관련해서 체계적으로 많은 옵션을 제공
- 개발자가 일일이 보안 관련 로직을 작성하지 않아도 됨
보안 용어
- 접근 주체 (principa) : 보호된 리소스에 접근하는 대상
- 인증 (Authentication) : 보호된 리소스에 접근한 대상에 대해 이 유저가 누구인지, 애플리케이션의 작업을 수행해도 되는 주체인지 확인하는 과정
- 인가 (Authorize) : 해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인하는 과정
- 권한: 어떠한 리소스에 대한 접근 제한, 모든 리소스는 접근 제어 권한이 걸려있음. → 인가 과정에서 해당 리소스에 대한 제한된 최소한의 권한을 가졌는지 확인
인증 아키텍처
- 사용자가 form을 통해 로그인 정보를 입력하고 인증 요청을 보냄
- AuthenticationFilter가 HttpServletRequest 에서 사용자가 보낸 ID, PW 인터셉트
- 안전을 위해 유효성 검사
- HttpServletRequest에서 가져온 ID, PW를 진짜 인증을 담당할 AuthenticationManager 인터페이스에게 인증용 객체로 만들어줘서 위임
- AuthenticationFilter에게 인증용 객체를 전달받는다.
- 실제 인증을 할 AuthenticationProvider에게 Authentication객체를 다시 전달한다.
- DB에서 사용자 인증 정보를 가져올 UserDetailsService 객체에게 사용자 아이디를 넘겨주고 DB에서 인증에 사용할 사용자 정보를 UserDetails라는 객체로 전달 받는다.