인증 _ 스프링시큐리티

Jaewoo Back·2024년 7월 12일
0
post-thumbnail

서블릿 인증 아키텍쳐

  • SecurityContextHolder - Spring Security가 인증된 사용자의 세부 정보를 저장하는 위치입니다.
  • SecurityContext - 현재 인증된 사용자의 SecurityContextHolder및 Authentication를 포함
  • Authentication - 사용자가 인증하기 위해 제공한 자격 증명을 제공하기 위한 입력 AuthenticationManager
  • GrantedAuthority - Authentication에서 역할, 범위 등 보안 주체에게 부여되는 권한
  • AuthenticationManager - Spring Security의 필터가 인증을 수행하는 방법을 정의하는 API입니다.
  • ProviderManager - AuthenticationManager의 가장 일반적인 구현이다.
  • AuthenticationProvider - 특정 유형의 인증을 수행하는 데 사용
  • AuthenticationEntryPoint - 클라이언트에서 자격 증명을 요청하는 데 사용(로그인 페이지로 리디렉션, 응답 보내기 등)
  • AbstractAuthenticationProcessingFilter - 인증에 사용되는 기반

SecurityContextHolder


Spring Security 인증 모델의 핵심

설정 SecurityContextHolder

SecurityContext context = SecurityContextHolder.createEmptyContext();
Authentication authentication =
    new TestingAuthenticationToken("username", "password", "ROLE_USER");
context.setAuthentication(authentication);

SecurityContextHolder.setContext(context);
  • 여러 스레드에서 경합 상태를 피하기 위해 새 SecurtyContext 인스턴스를 생성
  • 다음으로 새 Authentication 개체를 만듭니다.
  • 생성한 인증개체를 context에 저장합니다.
  • ContextHolder에 context를 저장합니다.

현재 인증된 사용자 액세스

SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
String username = authentication.getName();
Object principal = authentication.getPrincipal();
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();

보안 컨텍스트

Authentication

  • principal : 사용자를 식별합니다. 사용자 이름/ 비밀번호로 인증할 때 UserDetails의 인스턴스입니다.
  • authorities: GrantedAuthority 인스턴스는 사용자에게 부여되는 권한입니다.

권한부여

Authentication.getAuthorities()메서드에서 인스턴스를 가져올 수 있습니다.
이러한권한 역할은 나중에 웹 권한 부여, 메소드 권한 부여 및 도메인 오브젝트 권한 부여를 위해 구성됩니다.


인증 관리자

AuthenticationManager는 Spring Security의 필터가 인증을 수행하는 방법을 정의하는 API입니다. 직접 설정할 수 있으며 AuthenticationManager 구현은 무엇이든 될 수 있지만 가장 일반적인 구현은 ProviderManager입니다.


프로바이더 매니저

ProviderManager는 가장 일반적으로 사용되는 구현입니다.

AuthenticationProvider 인스턴스에 위임합니다. 각각의 인증이 성공 또는 실패해야 함을 나타내거나 결정을 내릴 수 없음을 나타내고 다운스트림이 결정할 수 있도록 할 수 있습니다.

인증이 수행될 수 없는 경우 참조되는 부모를 선택할 수 있습니다. 여러 인스턴스가 동일한 부모를 공유할 수 있습니다. 이는 공통된 인증이 있지만 서로 다른 인증 메커니즘이 있는 여러 SecurityFilterChain 인스턴스가 있는 시나리오에서 다소 일반적입니다.


profile
https://blog.naver.com/jaewoo2_25

0개의 댓글