SecurityContextHolder/SecurityContext/Authentication관계SecurityContextHolder └── SecurityContext (보안 컨텍스트) └── Authentication (인증 정보) ├── Principal (사용자 정보) ├── Credentials (비밀번호, JWT 등) └── Authorities (권한 정보)。
AuthenticationSecurityContextSecurityContextHolder
SecurityContextHolder:
。현재 실행중인thread의SecurityContext를 저장 및 관리하는저장소
▶ThreadLocal을 통해Thread별SecurityContext객체를 저장.
。스레드별인증이 완료된 개별 사용자의인증정보가 포함된Authentication 구현체가 저장된SecurityContext객체를 저장.
▶어플리케이션어디에서든지 현재 로그인한사용자 인증정보가 포함된Authentication 구현체를 가져올 수 있음.
SecurityContext:
。현재로그인한사용자의인증정보(Authentication)를 포함하는Container역할의 객체
▶AuthenticationProvider에 의해 인증이 완료된Authentication 구현체를 저장
。SecurityContextHolder에 저장 및 관리가 수행되며SecurityContextHolder를 통해 접근 가능.
。Controller의@AuthenticationPrincipal을 통해UserDetail 구현체에 현재 로그인중인Authentication 객체의principal을 주입하여@PathVariable등을 사용하지 않아도 현재 로그인한 사용자의principal정보를 가져올 수 있음
Authentication:
org.springframework.security.core.Authentication
。Spring Security에서 사용자의Authentication정보를추상화하는인터페이스
▶사용자정보(principal) ,권한정보(authorities) ,토큰(credentials) 등을 포함.
Authentication 구현체구조
ex)클라이언트에서 전송된HTTP Request의HTTP Basic Authentication인증정보가 포함된 경우의서버에서 생성된Authentication 구현체의 구조
principal:
。인증된 사용자의 세부정보를 의미.
▶ 보통UserDetails 객체의 내용을 포함
credentials
。사용자가인증시 입력한인증정보를 포함 ( ex.username,password,JWT Token)
。초기HTTP Request의Authorization Header에 포함된인증정보를 포함한 후AuthenticationManager에 의한검증후에는 보안을 위해null로 설정
authorities
。principal에 정의된 사용자가 보유한역할, 권한목록을 지시.
▶ 주로"ROLE_USER" , "ROLE_ADMIN"등의권한정보를 포함.