[Spring Security] Authentication Architecture

p1atin0uss·2022년 8월 20일
0

Spring Security

목록 보기
2/4

💡 개요


Spring Security의 인증(Authentication) 과정에서 많은 개념들이 사용되는데, Authentication(인증) 과정의 도식화를 살펴보고 각 개념들이 어떤 역할을 하는지 살펴보고자 한다.



📘 인증 과정 도식화


ex) UsernamePasswordAuthenticationToken(Authentication 객체)이 
ProviderManager에 도착하면, ProviderManager는 내부에 있는 AuthenticationProvider 목록을 
순회하면서 AuthenticationProvider의 supports() 메서드 return 값이 true인
AuthenticationProvider에게 Authentication 객체를 전달하고, 
해당 AuthenticationProvider는 authenticate() 메서드를 실행한다.


📌 GrantedAuthority


개념

  • 보안 주체(User 등)에게 부여된 권한을 뜻한다. (roles, scopes 등)
  • 사용자 이름/비밀번호 기반 인증을 사용할 때, GrantedAuthority는 일반적으로 UserDetailsService에 의해 로드된다.


📌 Authentication


개념

  • 인증에 사용되는 객체로, 인증 시 AuthenticationManager의 파라미터 값으로 전달된다.
  • 3가지 요소를 포함하고 있다.
    • principal : 사용자를 식별하는 요소
    • credentials : 비밀번호
    • authorities : 해당 principal에 부여된 권한 (roles, scopes 등)



📌 AuthenticationManager


개념

  • Spring Security의 Filter가 Authentication(인증)을 수행하는 방법을 정의한 API로, 인증을 담당한다.
  • Spring Security의 필터들에 의해 반환된 Authentication은 SecurityContextHolder에 저장된다.
  • 일반적인 구현체는 ProviderManager이다.


📌 ProviderManager


개념

  • AuthenticationManager의 구현체이다.
  • AuthenticationProvider 목록을 가지고 있다.

구성도



📌 AuthenticationProvider


개념

  • 여러 AuthenticationProvider를 ProviderManager에 주입할 수 있다.
  • support() 메서드와 authenticate() 메서드가 존재하며, support() 메서드는 처리 가능한 Authentication을 알려주는 역할을 한다.
  • authenticate() 메서드는 Authentication 객체를 입력값으로 받으며, 실질적으로 사용자로부터 입력받은 값을 검증해야 하는 메서드이다. 인증에 성공하면 GrantedAuthority 객체가 포함된 Authentication 객체를 반환하고 반환된 Authentication 객체는 SecurityContextHolder에 설정된다.
  • 각 AuthenticationProvider는 특정 유형의 인증을 진행한다.
    • DaoAuthenticationProvider : username/password 기반 인증 지원
    • JwtAuthenticationProvider : JWT 토큰 기반 인증 지원


📌 SecurityContextHolder


개념

  • Spring Security의 Authentication model의 핵심이다.
  • Spring Security에서 인증된 User의 세부정보를 저장하는 곳
  • 특정 User의 값이 SecurityContextHolder에 포함되어 있다면 인증된 사용자로 간주한다.
  • SecurityContext를 포함하고 있다.


📌 SecurityContext


개념

  • SecurityContextHolder에 포함되어 있다.
  • 현재 인증된 User의 Authentication을 포함한다.

구성도



🏴 Reference


docs.spring.io - Authentication Architecture

profile
지식의 깊이는 곧 이해의 넓이 📚

0개의 댓글