Spring Security - SecurityContextHolder / SecurityContext / Authentication

TopOfTheHead·2025년 11월 18일

Spring Security

목록 보기
4/21

SecurityContextHolder / SecurityContext / Authentication 관계

SecurityContextHolder
   └── SecurityContext (보안 컨텍스트)
         └── Authentication (인증 정보)
               ├── Principal (사용자 정보)
               ├── Credentials (비밀번호, JWT 등)
               └── Authorities (권한 정보)

Authentication \in SecurityContext \in SecurityContextHolder

SecurityContextHolder :
。현재 실행중인 threadSecurityContext를 저장 및 관리하는 저장소
ThreadLocal을 통해 ThreadSecurityContext객체를 저장.

스레드인증이 완료된 개별 사용자의 인증정보가 포함된 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 RequestHTTP Basic Authentication 인증정보가 포함된 경우의 서버에서 생성된 Authentication 구현체의 구조

    principal :
    。인증된 사용자의 세부정보를 의미.
    ▶ 보통 UserDetails 객체의 내용을 포함

    credentials
    。사용자가 인증 시 입력한 인증정보를 포함 ( ex. username, password , JWT Token )

    。초기 HTTP RequestAuthorization Header에 포함된 인증정보를 포함한 후 AuthenticationManager에 의한 검증 후에는 보안을 위해 null로 설정

    authorities
    principal에 정의된 사용자가 보유한 역할, 권한 목록을 지시.
    ▶ 주로 "ROLE_USER" , "ROLE_ADMIN" 등의 권한정보를 포함.
profile
공부기록 블로그

0개의 댓글