본문으로 바로가기

[Spring] Spring Security (스프링 시큐리티)란?

category TIL/Spring 2022. 5. 13. 09:14

Spring Security (스프링 시큐리티)

스프링 기반의 애플리케이션의 보안(인증, 권한, 인가)을 담당하는 스프링 하위 프레임워크
  • 인증 (Authenticate) : 누구인가?
  • 인가 (Authorize) : 무엇을 할 수 있는가?

 

Spring Security를 사용하지 않으면

  • 매 요청마다 세션을 검사 → Authenticate (인증)
  • 매 요청마다 유저의 권한을 검사 → Authorize (인가)

 

개념

  • 접근주체 (Principal)
보호된 리소스에 접근하는 대상
  • 인증 (Authentication)
보호된 리소스에 접근한 대상이 누구인지, 애플리케이션 작업을 수행해도 되는 주체인지 확인하는 과정 (Who?)
  • 인가 (Authorize)
해당 리소스에 대한 접근 권한을 가지고 있는지 확인하는 과정 (Can?)
  • 권한
리소스에 대한 접근 권한

        - 모든 리소스에는 접근 제어 권한이 있음

        - 인가 과정에서 해당 리소스에 대한 제한된 최소한의 권한을 가졌는지 확인

 

특징과 구조

  • 보안과 관련해서 체계적으로 많은 옵션을 제공
  • 필터 기반으로 동작 → MVC와 분리하여 관리 및 동작
  • 애노테이션을 통한 간단한 설정이 가능
  • 세션 & 쿠키 기반 인증
  • 인증 관리자와 접근결정 관리자를 통해서 사용자의 리소스 접근을 관리
    • 인증 관리자 (Authentication Manager)
        → UsenamePasswordAuthenticationFilter가 수행
    • 접근결정 관리자 (Access Decision Manager)
        → FilterSecurityInterceptor가 수행

 

작동 구조

  1. DispatcherServlet 앞 단에 Filter를 배치시켜 요청을 가로챔
  2. 클라이언트에 접근 권한이 없다면 인증화면으로 자동 리다이렉트

 

Filter

필터 기능
SecurityContextPersistenceFilter SecurityContextRepository에서 SecurityContext를 로드하고 저장
LogoutFilter • 로그아웃 URL로 지정된 가상 URL에 대한 요청을 감시
• 매칭되는 요청이 있으면 사용자를 로그아웃시킴
UsernamePasswordAuthenticationFilter • 사용자명과 비밀번호로 이루어진 폼기반 인증에 사용하는 가상 URL 요청을 감시
매칭되는 요청이 있으면 사용자의 인증을 진행
DefaultLoginPageGeneratingFilter 폼기반 또는 OpenIP 기반 인증에 사용하는 가상 URL에 대한 요청을 감시
로그인 폼 기능을 수행하는데 필요한 HTML을 생성
BasicAuthenticationFilter HTTP 기본 인증 헤드를 감시하고 처리
RequestCacheAwareFilter 로그인 성공 이후 인증 요청에 의해 가로채어진 사용자의 원래 요청을 재구성
SecurityContextHolderAwareRequestFilter HttpServletRequest와 HttpServletRequestWrapper를 상속하는 하위 클래스인 SecurityContextHolderAwareRequestWrapper로 감싸
필터 체인 하단에 위치한 요청 프로세서에 추가 컨텍스트를 제공
AnoymousAuthenticationFilter 이 필터가 호출되는 시점까지 사용자가 아직 인증을 받지 못한 경우
요청 관련 인증 토큰에서 사용자가 익명 사요자로 나타나게 됨
SessionManagementFilter 인증된 주체를 바탕으로 세션 트래킹을 처리해 단일 주체과 관련된 모든 세션들이 트래킹 되도록 함
ExceptionTranslationFilter 보호된 요청을 처리하는 동안 발생할 수 있는 예외의 기본 라우팅과 위임을 처리
FilterSecurityInterceptor 권한부여와 관련된 결정을 AccessDecisionManager에게 위임해 권한부여 결정 및 접근 제어 결정을 쉽게 해줌

 

사용법

   1. build.gradle에 security 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

   2. Java Config

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    }
}

        • @Configuration

              ◦ bean을 등록하고 있음을 명시     

        • @EnableWebSecurity

              ◦ SpringSecurityFilterChain을 자동으로 등록

        • @EnableGlobalMethodSecurity

              ◦ 스프링 시큐리티의 메서드 애노테이션 기반 시큐리티를 활성화

        • WebSecurityConfigurerAdapter

 


[ 출처 ]

https://devuna.tistory.com/55

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

[Spring] annotation 종류  (0) 2022.05.06
component-scan  (0) 2021.10.29