기술면접 준비

Spring Security의 구조와 JWT 발급 과정에 대해 설명해주실 수 있을까요?

Albosa2lol 2024. 8. 20. 19:27

Spring Security는 Spring 애플리케이션에서 인증과 권한 부여를 담당하는 프레임워크입니다. Spring Security의 주요 구조와 JWT 발급 과정은 다음과 같습니다:

 

 

Spring Security의 구조:

  1. SecurityContext:
    • 현재 사용자(Principal)에 대한 보안 정보를 저장합니다.
    • SecurityContextHolder를 통해 어디서나 접근할 수 있습니다.
  2. Authentication:
    • 사용자의 인증 정보를 나타내며, Principal, Credentials, Authorities 등을 포함합니다.
  3. AuthenticationManager:
    • 사용자 인증을 처리하는 인터페이스입니다.
    • 일반적으로 ProviderManager가 구현체로 사용되며, 여러 AuthenticationProvider를 통해 인증을 시도합니다.
  4. Filter Chain:
    • 여러 필터들이 연결되어 요청을 처리합니다.
    • 주로 UsernamePasswordAuthenticationFilter를 사용하여 사용자 인증을 처리합니다.
  5. Authorization:
    • 인증된 사용자가 요청한 자원에 접근할 수 있는 권한이 있는지 검증합니다.
    • AccessDecisionManager가 권한을 결정합니다.

JWT 발급 과정:

  1. 사용자 인증:
    • 사용자가 로그인 정보를 전송하면 UsernamePasswordAuthenticationFilter에서 이를 가로채고, AuthenticationManager를 통해 인증을 시도합니다.
  2. 토큰 생성:
    • 인증이 성공하면 JwtTokenProvider와 같은 클래스에서 JWT를 생성합니다.
    • JWT에는 사용자 정보(주로 username)와 만료 시간(expiration time) 등이 포함됩니다.
  3. 토큰 발급:
    • 생성된 JWT를 클라이언트에게 응답으로 전송합니다.
    • 일반적으로 HTTP 헤더(Authorization: Bearer <token>)에 포함시켜 전송합니다.
  4. 토큰 인증:
    • 이후 클라이언트가 요청할 때, JWT를 함께 전송합니다.
    • 서버에서는 요청을 받을 때 JWT를 검사하여 사용자 인증을 처리합니다.
    • 유효한 JWT인 경우, 사용자를 인증된 상태로 처리하고 요청을 수행합니다.