[스프링 시큐리티] - 구조

이종찬·2023년 10월 31일
0
post-thumbnail
post-custom-banner

인증 아키텍처 (Servlet Authentication Architecture)

SecurityContextHolder

Spring Security가 인증된SecurityContextHolder 사람에 대한 세부 정보를 저장하는 곳입니다 .

내부에 있는 Spring Security는 어떻게 구성되어있는지 신경쓰지 않고 포함되어 있으면 현재 인증된 사용자로 사용됩니다.

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

SecurityContext

SpringSecurityContextHolder에서 가져올 수 있으며 해당 객체는 인증 개체Authentication이 포함되어 있습니다.

Authentication

해당 객체는 스프링 시큐리티에서 두가지의 목적을 가지고 있습니다.

  1. AuthenticationManager를 통해 인증을 위한 자격증명
  2. 인증된 사용자를 나타내는 것

해당 객체는 다음과 같은 구성요소를 가지고 있습니다.

  • Principal
    - 사용자를 식별 목적
    - UserDetails의 인스턴스인 경우가 많습니다.
  • Credentials
    - 인증을 위한 자격 증명 목적
    - 인정된 이후 유출되지 않도록 지워집니다.
  • Authorities
    - 유저에게 부여되는 권한 수준
    - GrantAuthority인스턴스는 사용에게 부여되는 상위 수준 권한

GrantAuthority

일반적으로 애플리케이션 전체 권한을 의미하며 특정 도메인에 국한되지 않습니다. Authentication.getAuthorities()메서드에서 해당 인스턴스를 얻을 수 있으며 웹 권한 부여, 메서드 구너한 부여 및 도메인 객체 권한 부여를 위해 구성됩니다. 일반적으로 ROLE_ADMIN, ROLE_USER와 같은 역할을 맡고 있으며 UserDetailService에 의해 호출됩니다.

Authentication Manager

SpringSecurity의 필터가 인증을 수행하는 방법을 정의하는 API 이며 반환된 인증은 호출한 컨트롤러에 의해 SecurityContextHolder에 설정됩니다.

ProviderManager

AuthenticationProvider인스턴스 목록에 위임하며 인증의 성공, 실패와 같은 내용을 구성합니다. 구성할 수 없는 경우 ProviderNotFoundException과 함께 인증이 실패되며 가장 일반적으로 사용되는 구현입니다.

AuthenticationProvider

여러 가지의 AuthenticationProvider들이 ProviderManager에 삽입될 수 있으며 각각 알맞은 유형의 인증을 수행합니다.

참조 : 스프링 시큐리티 공식 문서

profile
왜? 라는 질문이 사라질 때까지
post-custom-banner

0개의 댓글