스프링 시큐리티

손호영·2023년 11월 28일

Spring Security?

스프링 기반의 애플리케이션 인증을 담당하는 스프링 하위 프레임워크.

  • 애너테이션 기반 설정
  • CSRF 공격(사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격) 방어
  • 세션 고정 공격(사용자의 인증 정보 탈취 또는 변경) 방어
  • 요청 헤더도 보안 처리

인증과 인가

  • 인증은 사용자의 신원을 입증하는 과정
    • ex) 사용자가 사이트에 로그인을 할때 확인하는 과정
  • 인가는 사이트의 특정 부분에 접근할 수 있는지에 권한을 확인하는 작업
    • 사이트의 특정 부분에 접근할 수 있는지에 권한을 확인하는 작업

필터 기반으로 동작하는 스프링 시큐리티

다양한 필터들로 나누어져 있고, 각 필터에서 인증, 인가와 관련된 작업을 처리
SecurityContextPersistenceFilter 부터 시작해서 아래로 내려가며
FilterSecurityInterceptor 까지 순서대로 필터를 거침

  • UsernamePasswordAuthentication : 아이디와 패스워드가 넘어오면 인증 요청을 위임하는 인증 관리자 역할
  • FilterSecurityInterceptor : 권한 부여 처리를 위임해 접근 제어 결정을 쉽게 하는 접근 결정 관리자 역할

Spring Security 인증 진행 절차

  1. 사용자가 폼에 아이디와 패스워드를 입력하면, HTTPServeletRequest에 아이디와 비밀번호 정보가 전달
    이때 AuthenticationFilter 가 넘어온 아이디와 비밀번호의 유효성 검사를 함.
  2. 유효성 검사가 끝나면 실제 구현체인 UsernamePasswordAuthenticatonToken 을 만들어서 넘겨줌
  3. 전달받은 객체를 AuthenticationManager 에게 보냄
  4. AuthenticationManager 가 그 객체를 AuthenticationProvider 에게 보냄
    5.사용자 아이디를 UserDetailService 에 보냄. UserDetailService 는 사용자 아이디로 찾은 사용자 정보를 UserDetail 객체로 만들어 AuthenticationProvider에게 전달
  5. DB에 있는 사용자 정보를 가져옴
  6. 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리를 함
    8~10 까지 인증이 완료되면 SecurityContextHolderAuthentication 을 저장
    성공하면 AuthenticationSuccessHandler 를 실행, 실패하면 AuthenticationFailureHandler 를 실행
profile
안녕하세요. 열심히 해보겠습니다

0개의 댓글