[Spring Security] 기본

see1237·2022년 9월 23일
0

Section4

목록 보기
2/13

Spring Security란?

  • Spring MVC 기반 애플리케이션의 인증(Authentication)과 인가(Authorization or 권한 부여) 기능을 지원하는 보안 프레임워크
  • Spring MVC 기반 애플리케이션에 보안을 적용하기위한 사실상의 표준

기본 구조

  • Spring Security Configuration
    - @Configuration 애너테이션 추가
    • HttpSecurity 를 파라미터로 가지고, SecurityFilterChain 을 리턴하는 Bean을 생성하여 보안 설정
    • PasswordEncoder는 다양한 암호화 방식을 제공하며, Spring Security에서 지원하는 PasswordEncoder의 디폴트 암호화 알고리즘은 bcrypt이다.
  • Spring Security에서 SimpleGrantedAuthority 를 사용해 Role 베이스 형태의 권한을 지정할 때 ‘Role_’ + 권한명 형태로 지정해 주어야 한다.
  • UserDetails : UserDetailsService에 의해 로드(load)되는 핵심 User 정보를 표현하는 인터페이스

Srping Security의 웹 요청 처리

  • DelegatingFilterProxy
    • 서블릿 컨테이너 영역의 필터와 ApplicationContext에 Bean으로 등록된 필터들을 연결해주는 브릿지 역할을 한다.
  • Spring Security의 Filter Chain
    • Spring Security에서 보안을 위한 작업을 처리하는 필터의 모음이며, Spring Security의 Filter를 사용하기 위한 진입점이 FilterChainProxy이다.

Spring Security 인증 처리

  • AuthenticationManager
    • 인증 처리를 총괄하는 매니저 역할을 하는 인터페이스이며, 인증을 위한 실질적인 관리는 AuthenticationManager를 구현하는 구현 클래스를 통해 이루어짐
  • AuthenticationProvider
    • AuthenticationManager로부터 인증 처리를 위임 받아 실질적인 인증 수행을 담당하는 컴포넌트
  • UserDetails
    • 사용자의 자격을 증명해주는 크리덴셜(Credential) 즉, 데이터베이스 등의 저장소에 저장된 사용자의 Username과 Password 그리고 사용자의 권한 정보를 포함하는 컴포넌트
  • UserDetailsService
    • UserDetails를 로드(load)하는 핵심 인터페이스
    • UserDetailsService 는 데이터베이스 등의 저장소에서 사용자의 크리덴셜(Credential)을 조회하여 AuthenticationProvider 에게 제공한다.
  • UsernamePasswordAuthenticationFilter가 생성하는 Authentication인증을 위해 필요한 사용자의 로그인 정보를 가지고 있지만, AuthenticationProvider 가 생성한 Authentication인증에 성공한 사용자의 정보(Principal, Credential, GrantedAuthorities)를 가지고 있다.
  • 인증된 Authentication을 전달 받은 UsernamePasswordAuthenticationFilterSecurityContextHolder를 이용해 SecurityContext인증된 Authentication을 저장한다. SecurityContext는 다시 HttpSession 에 저장되어 사용자의 인증 상태를 유지한다.

Spring Security 권한 부여 구성요소

  • AuthorizationFilter
    • URL을 통해 사용자의 액세스를 제한하는 권한 부여 Filter
  • AuthorizationManager
    • 권한 부여 처리를 총괄하는 매니저 역할을 하는 인터페이스
  • RequestMatcherDelegatingAuthorizationManager
    • AuthorizationManager의 구현 클래스 중 하나이며, RequestMatcher 평가식을 기반으로 해당 평가식에 매치되는AuthorizationManager에게 권한 부여 처리를 위임하는 역할을 한다. (직접 권한 부여 처리를 수행하지 않고 RequestMatcher를 통해 매치되는 AuthorizationManager 구현 클래스에게 권한 부여 처리를 위임)
  • RequestMatcher
    • SecurityConfiguration에서 .antMatchers("/orders/**").hasRole("ADMIN") 와 같은 메서드 체인 정보를 기반으로 생성된다.

0개의 댓글