Spring Security

김대웅·2021년 9월 28일

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(사이트간 요청 위조)
      • 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 생성 등)를 특정 사이트에 요청하게 하는 행위(참고)
      • Synchronizer Token 패턴을 사용하여 보호 수행(참고)
  • 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
    • 로그인 페이지 생성
            
profile
42seoul cadet

0개의 댓글