Spring Security와 JWT 인증


1. 소개




2. Spring Security

스프링에서 제공하는 인증과 권한 보안 관련 기능을 제공하는 프레임워크이다.




3. Spring Security 내부구조

Spring Security의 내부 구조는 서블릿 필터 체인이다. 즉, 클라이언트 요청이 서블릿(controller)에 도달하기 전에 여러 개의 필터를 거치며 보안 검사를 수행한다. 또한 사용자는 이 필터를 커스텀해 사용할 수 있다.




4. Spring Security with JWT

4-1. Login


🔴 1번: Login 요청 (진입)

spring-security-number



🔴 2번: Security Filter Chain

spring-security-number



🔴 3번: UserService

spring-security-number



🔴 4번: AuthenticationManager

spring-security-number



🔴 5번: 실질적 검증 및 인증 성공

spring-security-number



4-1. Posting

spring-security-number


🔴 1번: Posting 요청

spring-security-number



🔴 2번: Spring Security Filter

spring-security-number

  1. JwtAuthenticationFilter 의 토큰 검증
    • 스프링 시큐리티의 문지기로, 가장 먼저 요청을 가로챔
    • 헤더에서 토큰 추출해서 JwtTokenProvider에게 토큰 유효한지 질문
  2. Security Context 에 신분증 저장
    • 토큰을 기반으로 Authentication 객체를 만들어 저장
  3. AuthorizationFilter 의 규칙 확인
    • 이 요청(POST /api/posts)은 `인증된 사람만 가능하네
    • 아까 저장한 SecurityContextHolder 를 열어볼게
    • 신분증 Authentication 이 들어있네? 통과!


🔴 3번: Spring boot 로직

spring-security-number

정리

유저가 보낸 토큰은




5. Reference