스프링 Security 흐름도

박경현·2023년 5월 29일
0

스프링으로 블로그를 만들어보는데 드디어 시큐리티를 사용했다!

OAuth까지 3번 이상 만들어 본다음 블로그를 만드는 과정은 정리해서 올릴 예정이다

그래서 지금은 시큐리티를 더 잘 이해할 수 있게 어떻게 동작하는지 적어보려고 한다!!

스프링 시큐리티란

spring Security에서 핵심은 "인증"과 "인가"로 볼 수 있다

인증(Authenticate) => 이 사용자가 사이트에 들어올 수 있는 사용자인지
인가(Authorize) => 어디까지 사용자가 권한을 가지고 있는지를 판단

스프링 시큐리티를 사용하면 개발자가 일일이 보안 관련 로직을 작성하지 않아도 됨!

스프링 시큐리티의 특징

  1. Filter 기반으로 동작해서 Spring MVC와 별개로 동작해서 영향을 주지 않는다

  2. 어노테이션으로 간단한 설정이 가능함!

  3. 기본적으로 세션 & 쿠키 방식으로 인증한다!

스프링 시큐리티의 흐름도

시큐리티 흐름도를 찾으면 가장 대표적으로 나오는 아키텍처 그림이다!!

  1. 처음에는 유저가 HttpRequest로 url로 들어가길 요청한다
    스프링 시큐리티는 필터로 동작해서 인증과 인가를 위한 필터를 제공한다!

    ex) loginForm에 의한 인증 요청은 UserPasswordAuthenticationFilter를 통과!
    Http 기본 인증을 요청하면 BasicAuthenticationFilter를 통과한다

  2. 유저 자격을 기반으로 인증 토큰을 만든다
    username과 password를 요청으로 추출하여 인증객체를 생성!
    그래서 UsernamePasswordAuthentication Token을 생성함!!

  3. Filter를 통해 Authentication Token을 Authentication Manager에게 위임한다

    UsernamePasswordAuthentication Token을 생성후
    AuthenticationManager의 인증 메소드를 호출한다!!
    (인터페이스여서 구현은 ProductManager로 되어있음!!)

  4. AuthenticationManager에 등록된 AuthenticationProvider를 조회하여 인증을 요구

    실제 DB에서 사용자 인증 정보를 가져오는 UserDetailsService에 사용자 정보를 넘겨줌
    이제 DB에서 찾은 사용자 정보인 UserDetails 객체를 만든다
    AuthenticationProvider는 UserDetails객체를 넘겨받고 사용자 정보를 비교!

  5. 인증이 완료되면 권한 등의 사용자의 정보를 담은 Authentication 객체를 반환!
    다시 최초의 AuthenticationFilter에 Authentication 객체가 반환됨!
    Authentication 객체를 SecurityContext에 저장함!

최종적으로 SecurityContextHolder는 세션영역에 있는 SecurityContext에
Authentication객체를 저장!

사용자의 정보를 저장한다는 것은 세션-쿠키 인증 방식을 사용하겠다는 것!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글