Spring Security는 Spring 애플리케이션에서 인증과 권한 부여를 담당하는 프레임워크입니다. Spring Security의 주요 구조와 JWT 발급 과정은 다음과 같습니다:
Spring Security의 구조:
- SecurityContext:
- 현재 사용자(Principal)에 대한 보안 정보를 저장합니다.
- SecurityContextHolder를 통해 어디서나 접근할 수 있습니다.
- Authentication:
- 사용자의 인증 정보를 나타내며, Principal, Credentials, Authorities 등을 포함합니다.
- AuthenticationManager:
- 사용자 인증을 처리하는 인터페이스입니다.
- 일반적으로 ProviderManager가 구현체로 사용되며, 여러 AuthenticationProvider를 통해 인증을 시도합니다.
- Filter Chain:
- 여러 필터들이 연결되어 요청을 처리합니다.
- 주로 UsernamePasswordAuthenticationFilter를 사용하여 사용자 인증을 처리합니다.
- Authorization:
- 인증된 사용자가 요청한 자원에 접근할 수 있는 권한이 있는지 검증합니다.
- AccessDecisionManager가 권한을 결정합니다.
JWT 발급 과정:
- 사용자 인증:
- 사용자가 로그인 정보를 전송하면 UsernamePasswordAuthenticationFilter에서 이를 가로채고, AuthenticationManager를 통해 인증을 시도합니다.
- 토큰 생성:
- 인증이 성공하면 JwtTokenProvider와 같은 클래스에서 JWT를 생성합니다.
- JWT에는 사용자 정보(주로 username)와 만료 시간(expiration time) 등이 포함됩니다.
- 토큰 발급:
- 생성된 JWT를 클라이언트에게 응답으로 전송합니다.
- 일반적으로 HTTP 헤더(Authorization: Bearer <token>)에 포함시켜 전송합니다.
- 토큰 인증:
- 이후 클라이언트가 요청할 때, JWT를 함께 전송합니다.
- 서버에서는 요청을 받을 때 JWT를 검사하여 사용자 인증을 처리합니다.
- 유효한 JWT인 경우, 사용자를 인증된 상태로 처리하고 요청을 수행합니다.
'기술면접 준비' 카테고리의 다른 글
N+1 문제의 발생 이유와 해결 방법에 대해 설명해주실 수 있을까요? 해결 방법은 3가지 이상 (0) | 2024.08.20 |
---|---|
Annotation이란 무엇이고 구체적으로 어떤 것이 있는지 예시를 들어 설명해주실 수 있을까요? (0) | 2024.08.20 |
MVC 모델이란 무엇인지 설명해주실 수 있을까요? (0) | 2024.08.13 |
DI와 IoC에 대해 아는 만큼 설명해주실 수 있을까요? (0) | 2024.08.13 |
Java Map의 내부 구현은 어떻게 이루어져 있을지 추측해보실 수 있을까요? (0) | 2024.08.13 |