Spring Security

정체는 김태현·2022년 10월 7일
0

항해99

목록 보기
11/38

Spring Security

스프링 시큐리티는 자바 애플리케이션의 인증과 권한 부여를 제공하는 데 중점을 둔 프레임워크이다.

  • Spring Security는 스프링 기반 앱의 보안 표준이다.
  • 권한 부여(Authorization)는 반드시 인증(Authentication) 후에 수행된다.
  • 서블릿 필터는 요청을 가로채 처리하는 자바 API이다.
  • Spring Security 필터는 보안 관련 작업을 하며 Spring Security Filter Chain은 그 모음이다.
  • DelegatingFilterProxy는 기존 필터와 Spring Security 필터를 연결하는 역할을 한다.
  • FilterChainProxy는 Spring Security Filter Chain을 사용하기 위한 진입점이다.

장점

기존 서블릿 필터에서 인증처리를 한 것보다 Custom requirements(맞춤형 요구사항) 을 충족시키기 위해 쉽게 확장시킬 수 있다.

  • 다양한 유형(폼 로그인, 토큰 기반, OAuth 2 기반)의 인증
  • 사용자의 역할에 따른 권한 레벨 및 리소스에 대한 접근 제어
  • TLS 적용 및 민감한 정보 암호화
  • 알려진 보안 공격 차단
  • 다양한 커스터마이징 및 유연한 확장

개발자가 직접 보안 기능을 구현할 수 있음에도 스프링 시큐리티를 사용하는 것이 안전한 선택이 된다.

1.Filter

필터는 체인처럼 엮어 있기 때문에 , 필터체인이라고도 불린다.

모든 request 는 이 필터 체인을 반드시 거쳐야 한다.

Spring Security는 filter 기반으로 동작하기 때문에 ,

Spring MVC와 분리되어 관리 및 동작한다.

2. Security 용어

  • 접근 주체(Principal) 인증을 시도하는 주체를 User, 주체의 구체적인 정보(Username ID)를 Principal이라고 한다.

실제로는 혼용돼서 사용되는 듯하며, 보통 Entity 클래스에 그 정보가 담긴다.

  • 인증(Authentication) 인증은 User, 혹은 Principal이 본인이 맞음을 증명하는 절차를 말한다.

정상적인 인증을 위해 제출하는 식별 정보를 Credential(신원 증명 정보)라고 하며, 일종의 신분증 역할을 한다. 공인인증서, OTP, 사이트 비밀번호 등이 그 예가 된다.

  • 인가(Authorization) 권한 부여, 혹은 인가는 인증을 통과한 사용자에게 역할(Role)에 따라 특정 권한(Authority)을 부여하는 절차이다.

여기서 권한이란 사용하는 앱의 특정 리소스에 접근할 수 있는 권한을 말하며, 사용자에 따라 권한을 제어하는 행위를 따로 접근 제어(Access Control)라 부르기도 한다. 권한 부여는 당연하게도 반드시 인증과정 이후에 수행되어야 한다.

Spring Security 처리 과정

  1. 요청이 들어오면 AuthenticationFilter(UsernamePassAuthenticationFilter)에 접근

  1. 요청에 따른 UsernamePasswordAuthenticationToken == 'Token'
    (Authentication interface Impl) 을 생성한다.

  1. Token을 AuthenticationManager 에게 해당 Token이 유효한지 확인

  1. AuthenticationManager는 1개 이상의 AuthenticationProvider 를 갖고 있는데 ,
    AuthenticationProvider 는 Token 객체를 판단하여 인증처리를 시도한다.

  1. AuthenticationProvider가 직접 구현한 서비스(UserDetailService)에 해당유저에게 인증요청을 보내어 사용자 정보를 가져온다.

  1. UserDetailService 구현 클래스는 SecurityContextHolder 의 Context(세션의 사용자 정보가 있는 DB) 에서 사용자 정보를 가져와 UserDetails를 반환한다.
  1. ~ 10. Provider는 UserDetailService 에서 반환된 UserDetails와 클라이언트가 제공한인증정보(Token)을 대조하여 사용자가 유효한 사용권한을 가지고 있는지 확인한다.
profile
하나부터 열가지 다

0개의 댓글

관련 채용 정보