Skip to content

Latest commit

 

History

History
39 lines (27 loc) · 2.11 KB

Spring+Security.md

File metadata and controls

39 lines (27 loc) · 2.11 KB

Spring Security

Spring Security는 Spring Application의 보안(인증, 인가)를 담당

  • Spring Security 는 Filter를 기반으로 동작하기 때문에 Spring MVC와 분리되어 관리 및 동작
  • Session-Cookie 방식으로 인증

스프링 시큐리티의 특징

  1. 서블릿 API 통합
  2. Spring Web MVC와의 선택적 통합
  3. 인증과 권한 부여를 모두 포뢀적이고 확장 가능한 지원
  4. 세션 고정, clickjacking, 사이트 간 요청 위조 등과 같은 공격으로부터 보호
  5. 서블릿 필터 체인을 자동으로 제공

로그인 인증 구조

  1. HTTP 요청 들어옴
  2. AuthenticationFilter가 HTTP request에서 사용자가 보낸 정보를 intercept
  3. 인증용 객체인 UsernamePasswordAuthentication Token을 만들어서 위임
    • User의 ID가 Principle 역할, Password가 Credential 역할
  4. AuthenticationManager가 AuthenticationProvider에게 객체 전달
  5. UserDetailsService에 가서 Authentication을 가지고 User임을 확인하면, UserDetails을 꺼내서 session 생성
  6. SpringSecurity 저장소인 SecurityContextHolder에 저장하고, 요청 쿠키에 JSESSIONID가 유효하면 인증을 하게 됨
    • Authentication에는 Pricipal, Credentials, Authorities가 저장되어있다.

시큐리티 주요 필터

  • SecurityContextPersistenceFilter : SecurityContextRepository를 통해 SecurityContext를 Load/Save 처리
  • LogoutFilter : 로그아웃 URL로의 요청을 감시하여 해당 사용자를 로그아웃 시킴
  • UsernamePasswordAuthenticationFilter : ID/비밀번호 기반 Form 인증 요청 URL을 감시하여 사용자를 인증함
  • ExceptionTransiationFilter : 요청을 처리하는 중에 발생하는 예외 위임하거나 전달
  • FilterSecurityInterceptor: 접근 권한 확인을 위해 요청을 AccessDecisionManger로 위임. 이 필터가 실행된느 시점에는 사용자가 인증됐다고 판단

참고자료: https://catsbi.oopy.io/c0a4f395-24b2-44e5-8eeb-275d19e2a536, https://youtu.be/aEk-7RjBKwQ