본문 바로가기
개발/Spring

[Spring] Spring Security 알아보기

by 상용최 2020. 3. 3.
반응형

Spring Security란 ?

강력하고 커스텀마이징 인증과 접근제어를 할 수 있는 프레임워크 

인증과 허가를 제공하는것에 중점을 둔 프레임워크

custom 요구사항이 생겼을때 쉽게 확장 가능하다.

 

특징

  • 인증 및 허가에 대한 포괄적이고 확장가능한 지원
  • session fixation, csrf, clickjacking 공격으로부터 보호해준다.
  • Servelet API integration
  • Optional integration With Spring Web MVC

간단한 동작방식

Filter의 attemptAuthentication에서 this.getAuthenticationManager().authenticate(authRequest) 을 통해 알맞는 Provider를 찾아 authenticate로직을 실행하고 성공과 실패 결과에 따른 추가적인 작업은 Handler 등록을 통해 작업이 가능하다

 

1. 알맞는 Provider는 Provider의 support 메소드를 통하여 검사한다. return값이 true일경우에 실행한다.

2. authenticate 메소드에서 성공하면 SecurityContext에 정보를 등록한다.

 

간단한 사용방법

   

1. 사용하려고 하는 class에 WebSecurityConfigurerAdapter를 상속받는다.

2. 사용하려고 하는 class에 @EnableWebSecurity 어노테이션을 달아준다.

3. configure(HttpSecurity http)를 오버라이드한 후 알맞는 보안설정을한다.

ex) hasrole, login, logout 등등

4. configure(AuthenticationManagerBuilder)를 오버라이드 한 후 사용할 Provider를 등록한다.

.. 등록할 Provider는 사용자가 만드는것이다.

5. LoginProvider.supports를 통하여 알맞은 Provider인지 검사한다 return값이 true이면 알맞다고 판단

6. supports에서 true가 나왔으면 인증로직을 수행하게 된다.

인증이 완료되면 SecurityContext에 인증되었다는 기록이 남게된다.

7. 아래와같은 Handler 하나를 만들어서 성공과 실패에 따른 로직을 작성하도록한다.

 

 

TIP!!

filter의 목록을 보고싶을땐 FilterChainProxy.class

ProviderManager의 동작원리를 보고싶을땐 ProviderManager.class

ProviderManager를 타고 들어가면 supports부터 authenticate까지 어떻게 동작하는지 확인할 수 있다.

인증이 되면 SecurityContext에 인증정보가 등록된다.

SecurityContext에 추가하는것을 보고싶다면 AbstractAuthenticationProcessingFilter.class

 

Login할때는 UsernamePasswordAuthenticationFilter를 이용한다.

Custom Filter를 만들때는 SecurityContext에 세팅해야한다.

 

 

 

 

참고 : https://spring.io/projects/spring-security

반응형

댓글