Spring/security

[시큐리티] SecurityContext

라임온조 2023. 3. 16. 10:52

1. SecurityContext 개념

인증 프로세스를 성공적으로 완료한 후 요청이 유지되는 동안 AuthenticationManager는 Authentication 인스턴스를 저장한다. Authentication 객체를 저장하는 인스턴스를 보안 컨텍스트라고 한다. 여기서 Authentication은 인증된 엔티티에 대한 세부 정보(사용자의 이름이나 권한)

public interface SecurityContext extends Serializable {
	Authentication getAuthentication();
    void setAuthentication(Authentication authentication);
}

2. SecurityContext를 관리하는 전략

1) MODE_THREADLOCAL

  • 스프링 시큐리티의 기본 전략
  • ThreadLocal을 이용해 컨텍스트 관리
  • 요청마다 새 스레드가 생성되고 새 스레드는 자체 보안 컨텍스트를 가짐
  • 각 스레드는 자신의 보안 컨텍스트에 있는 세부 정보에만 접근할 수 있음
  • 상위 스레드의 세부 정보가 새 스레드의 보안 컨텍스트로 복사되지 않음

2) MODE_INHERITABLETHREADLOCAL

  • 하나의 요청에 여러 스레드가 사용될 때
  • 요청마다 새 스레드가 생성되고 새 스레드는 자신의 보안 컨텍스트를 가지면서 요청의 원래 스레드로부터 세부 정보를 복사해서 가짐
  • 프레임워크가 자체적으로 스레드를 만들 때만 작동(@Async 메서드 이용), 코드로 직접 스레드를 만들면 문제 발생

3) MODE_GLOBAL

  • 보안 컨텍스트가 애플리케이션의 모든 스레드에 공유됨, 즉 모든 스레드가 같은 보안 컨텍스트에 접근
  • 경합 상황 발생가능해서 동기화 처리 필요
  • 독립형 애플리케이션에 주로 사용

3. DelegatingSecurityContextRunnable

1) 개념

프레임워크가 모르는 방법으로 코드가 새 스레드를 시작했을 때, 보안 컨텍스트를 새로 생성한 스레드로 전파하게 도와주는 스프링 시큐리티의 유틸리티 툴

2) 특징

  • 반환 값이 없는 작업 실행 후에는 DelegatingSecurityContextRunnable 사용
  • 반환 값이 있는 작업 실행 후에는 DelegatingSecurityContext Callable<T>에 해당하는 Callable<T> 대안을 이용

4. DelegatingSecurityContextExecutorService

1) 개념

프레임워크가 모르는 방법으로 코드가 새 스레드를 시작했을 때, 보안 컨텍스트를 새로 생성한 스레드로 전파하게 도와주는 스프링 시큐리티의 유틸리티 툴

2) 특징

  • 스레드 풀에서 전파를 관리
  • ExecutorService를 장식해 작업을 제출할 때 보안 컨텍스트 세부 정보를 전파

'Spring > security' 카테고리의 다른 글

[시큐리티] 필터  (0) 2023.03.23
[시큐리티] 권한과 역할제어  (0) 2023.03.21
[시큐리티] AuthenticationProvider  (0) 2023.03.15
[시큐리티] PasswordEncoder  (0) 2023.03.15
[시큐리티] UserDetailsService  (0) 2023.03.13