참고한 글: https://docs.spring.io/spring-security/reference/servlet/authentication/architecture.html
<Authentication Architecture>
자세한 건 위의 공식문서를 읽어보면 되고, 각 컨셉에 대한 빠른 이해를 위해 최대한 간략히 적어볼 예정.
1. SecurityContextHolder
- SecurityContext를 담고 있음
2. SecurityContext
- Authentication obejct 를 포함함.
3. Authentication
- 해당 인터페이스는 2가지 목적을 가짐
- 첫째, AuthenticationManager의 인풋(유저 인증을 위한 credential 공급을 목적으로)
- 둘째, 현재 인증된 유저를 나타내기 위해
- principal, credentials, authorities 등을 포함
- principal: userId, password
- credentials: often password
- authorities: grantedAuthoriy -> 해당 유저의 높은 수준의 허가 목록(high level permissions..?), 예를 들어 role과 scope.
4. AuthenticationManager
- SpringSecurity의 필터가 어떻게 인증을 수행하는지 정의하는 API라고 할 수 있다.
- AuthenticationManager를 호출하는 컨트롤러(즉, 스프링시큐리티 필터)에 의해 Authentication 인스턴스가 SecurityContextHolder에 저장됨.
- 가장 흔한 구현체는 ProviderManager임.
5. ProviderManager
- AuthenticationManager의 가장 흔한 구현체.
- ProviderManager는 인증을 AuthenticationProvider 리스트에 위임함.
6. AuthenticationProvider
- 다수의 AuthenticationProvider 인스턴스를 ProviderManager에게 주입할 수 있다.
- 각각의 AuthenticationProvider는 구체적인 타입의 인증을 수행한다.
- 예를 들어, DaoAuthenticationProvider는 username/password에 기반한 인증을,
- JwtAuthenticationProvider는 JWT 토큰에 대한 인증을 수행한다.
댓글