GW LABS

스프링 부트 핵심 가이드 (10) - 서비스의 인증과 권한 부여 본문

Book-Review/Programing

스프링 부트 핵심 가이드 (10) - 서비스의 인증과 권한 부여

GeonWoo Kim 2022. 8. 20. 17:27

13.1 보안 용어 이해

  • 인증: 사용자가 누구인지 확인하는 단계
  • 인가: 사용자가 애플리케이션 내부의 리소스에 접근할 권한이 있는지 확인하는 단계
  • 접근주체: 애플리케이션의 기능을 사용하는 주체

 

13.3 스프링 시큐리티의 동작 구조

  • 스프링 시큐리티는 서블릿 필터 기반으로 동작
  • DelegatingFilterProxy
    • 서블릿 컨테이너의 생명주기와 스프링 애플리케이션 컨텍스트 사이에서 다리 역할을 수행하는 필터 구현체
    • 표준 서블릿 필터를 구현하고 있고 필터체인 프록시를 내부에 가지고 있음
  • 필터체인 프록시
    • 스프링 시큐리티에서 제공하는 필터
    • 보안 필터체인을 통해 많은 보안 필터들을 사용할 수 있음
      • ex) CorsFilter, CsrfFilter, UsernamePasswordAuthenticationFilter
    • 예전 버전에서는 WebSecurityConfigurerAdapter를 상속받아 설정했지만 deprecated 되었음
  • UsernamePasswordAuthenticationFilter 인증과정
    1. 클라이언트 요청을 받으면 서블릿 필터에서 SecurityFilterChain으로 작업이 위임되고 그중 UsernamePasswordAuthenticationFilter에서 인증을 처리
    2. AuthenticationFilter가 요청객체에서 username, password를 추출하여 토큰생성
    3. AuthenticationManager(ProviderManager)에게 토큰 전달
    4. AuthenticationProvider에게 토큰 전달
    5. AuthenticationProvider는 토큰정보를 UserDetailsService에 전달
    6. UserDetailsService에서 전달받은 정보를 통해 DB에서 사용자를 찾아 UserDetails 객체를 생성
    7. UserDetails를 AuthenticationProvider로 전달, Provider에서 인증을 수행하고 성공하게 되면 ProviderManager로 권한을 담은 토큰을 전달
    8. ProviderManager는 검증된 토큰을 AuthenticationFilter로 전달
    9. AuthenticationFilter는 검증된 토큰을 SecurityContextHolder에 있는 SecurityContext에 저장

 

13.4 JWT

  • 당사자 간에 정보를 JSON 형태로 안전하게 전송하기 위한 토큰
    • xxxxx(헤더).yyyyy(내용).zzzzz(서명) 구조로 되어있음

 

13.5 스프링 시큐리티와 JWT 적용

  • spring-boot-starter-security, io.jsonwebtoken
  • 구현순서
    • UserDetails와 UserDetailsService
    • JwtTokenProvider 구현
    • JwtAuthenticationFilter 구현
      • GenericFilterBean / OncePerRequestFilter
    • SecurityConfiguration 설정
    • 커스텀 AccessDeniedHandler, AuthenticationEntryPoint 구현

 

Comments