인증과 시큐리티 컨텍스트

kwang·2023년 5월 6일
0

스프링시큐리티

목록 보기
3/5

Authentication

인증 요청 이벤트를 나타내며 애플리케이션에 접근을 요청한 엔티티의 세부 정보를 담는다. 이 인터페이스는 Principal 인터페이스를 확장한다.
Principal은 자바 시큐리티에 인터페이스로 이를 확장하여 다른 애플리케이션과 호환성을 고려했다.
인증 이벤트 도중 또는 후로 이 인터페이스를 구현한 구현체를 통해서 사용자 정보에 접근 할 수 있다.

AuthenticationProvider

인증논리를 담당하는 인터페이스며 이 인터페이스의 기본 구현은 사용자를 찾는 책임은 UserDetailsService에게 암호 관리는 PasswordEncoder를 이용하게 되어있다.

SecurityContext

보안 컨텍스트를 의미하며 인증이 완료된 사용자정보(Authentication)을 관리하는 역할을 한다.
해당 컨텍스트는 또 SecurityContextHolder를 통해 관리한다.
학교의 학생을 비유해 설명하자면 SecurityContextHolder(학교) -> SecurityContext(학급) -> Authentication(학생)이라고 이해하고 넘어가겠다.

보유 전략

보안 컨테스트 보유 전략은 기본적으로 아래의 세가지가 있다.

  • MODE_THREADLOCAL
    스레드별로 보안 컨테스트를 유지 일반적인 사용방법
  • MOD_INHERITABLEADLOCAL
    비동기 메서드의 경우 다음 스레드로 복사하여 전다한다. @Async를 사용하는 경우 같은 컨테스트를 사용한다 볼 수 있다.
    전략을 바꾸고 싶다면 아래와 같이 빈을 등록해주면된다
	@Bean
    fun initializingBean(): InitializingBean {
        return InitializingBean { SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL) }
    }
  • MODE_GLOBAL
    애플리케이션의 모든 스레드가 같은 보안 컨텍스트를 사용한다.

0개의 댓글