Spring Security

이상혁·2024년 2월 11일
0

Spring Security란

개발을 하다가 보면 로그인과 인증, 인가를 개발하는 경우는 매우 많다.
이러한 로그인이나 인증, 인가에 대해서 Spring boot에서 Spring Security에 위임해서 처리를 한다.
즉, Spring Security는 Spring 기반의 애플리케이션의 인증, 인가을 담당하는 하위 프레임워크이다.

인증, 인가 용어 정리

인증이란, 사용자의 신원을 확인하는 과정이다.
인가란, 어떤한 행위나 리소스에 대한 접근에 대해서 권한이 있는 지을 확인하는 과정이다.

Spring Security Architecture

Spring Security의 아키텍쳐에 대해서 알아보자

  1. 먼저, 사용자가 이메일(혹은 아이디), 비밀번호를 넣어서 요청을 보낸다.

  2. 요청을 Spring Security의 AuthenticationFilter가 요청을 받아서 UsernamePasswordAuthenticationToken을 생성한다.

  3. AuthenticationFilter가 토큰을 받아서 AuthenticationManager에게 받은 토큰을 넘겨주면서 인증을 위임한다.

  4. AuthenticationManager의 구현체인 ProviderManager가 AuthenticationProvider 인터페이스를 가지고 있는데 인증을 진행할 Provider을 찾아서 그 Provider에게 위임한다.

  5. AuthenticationProvider는 DB에 있는 사용자 정보와 로그인 페이지에서 입력한 정보를 비교한다.
    비교를 하기 위해서는 UserDetailsService와 UserDetailes를 구현해야 한다.
    UserDetailService에서 loaduserByUsername() 메소드를 오버라이딩해서 DB에 접근해서 사용자 정보를 가지고 오고 사용자 정보를 UserDetails에 타입으로 가져온다.
    그리고 사용자 입력 정보와 비교한다.

  6. 인증을 성공하면 AuthenticationProvider에서 인증된 인증용 객체를 Authentication 객체에 담아서 AuthenticationManager에게 반환한다. 그리고 AuthenticationManager는 AuthenticationFilter에게 전달한다.

  7. AuthenticationFilter는 SecurityContextHolder라는 곳에 담아서 AuthenticationSuccessHandler를 실행한다.

profile
개발 공부 하기 위해 만든 블로그

0개의 댓글