티스토리 뷰

반응형

초기화 과정


SecurityBuilder / SecurityConfigurer

  • SecurityBuilder는 빌더 클래스로서 웹 보안을 구성하는 빈 객체와 설정 클래스들을 생성하는 역할을 한다
  • ex) WebSecurity, HttpSecurity
  • SecurityConfigurer는 Http요청과 관련된 보안처리를 담당하는 필터들을 생성하고 여러 초기화 설정에 관여한다
  • SecurityBuilder는 SecurityConfigurer를 포함하고 있으며 인증 및 인가 초기화 작업은 SecurityConfigurer에 의해 진행된다.

build()메서드가 실행되면 init() & configure()이 실행된다

 

  • HttpSecurity는 최종적으로 SecurityFilterChain이라는 빈을 만든다
  • WebSecurity는 설정클래스에서 정의한 SecurityFilterChain 빈을 SecurityBuilder에 저장한다
  • WebSecurity가 build()를 실행하면 SecurityBuilder에서 SecuirtyFilterChain을 꺼내 FilterChainProxy 생성자에게 전달한다

 

 

 

 

AuthenticationEntryPoint


 

스프링 시큐리티는 초기화가 진행되면 두 개의 인증방식을 설정한다

FormLogin 인증방식, HttpBasic 인증방식

그런데 인증을 하면서 예외가 발생할 수 있기 때문에

각 인증방식마다  AuthenticationEntryPoint가 존재한다

ExceptionHandlingConfigurer에서는  AuthenticationEntryPoint에 관련된 설정을 다 한다

ExceptionTranslationFilter에는 AuthenticationEntryPoint가 저장이 된다

 

 

아무런 인증방식(FormLoginConfigurer, HttpBasicConfigurer)를 사용하지 않으면

Http403ForbiddenEntryPoint가 ExceptionTranslationFilter로 전달된다


 

 

시큐리티 인증 및 인가 흐름 요약


 

Servlet Filter

1. 사용자가 요청을 한다.

 

2. DelegatingFilterProxy가 받는다  

Proxy는 클라이언트와 Web서버 중간에 위치하여 대신 통신을 받아주는 것이다

Proxy는 사실상 Tomcat같은 WAS인데 스프링의 DI나 AOP 등 빈으로 관리하는 기능이 없다

그래서 빈으로 관리할 수 있는

 

3. 스프링 시큐리티의 FilterChainProxy로 요청을 전달해준다

 

 

 

 

Authentication

usernamepasswordauthentication을 자주쓴다(formlogin)

1. AuthenticationFilter가 /login으로오면 받는다

 

2. Authentication 객체를 만든다(id, password)

 

3. AuthenticationManager호출

보안적으로 뭔갈 하지 않고, 인증처리를 실질적으로 할 수 있는 클래스를 찾아서 위임한다

 

4. AuthenticationProvider호출

AuthenticationProvider가 ID, PW를 통해 인증처리를 한다

 

5. AuthenticationProvider가 회원 ID가 DB에 존재하는지 확인할때 UserDetailsService 클래스를 사용한다

 

6. 회원을 찾았을때 반환하는 타입은 UserDetails이다(이름,주소 등의 정보를 포함한다)

 

7. UserDetails는 UserDetailsService를 거쳐 AuthenticationProvider로 전달됨

 

8. 회원 ID와 일치하는 계정이 존재하는것을 확인했으니, PW가 일치하는지

PasswordEncoder를 통해 확인함

 

9. PW도 일치하면 최종적으로 인증에 성공한 결과(인증객체)를 AuthenticationManager에게 전달한다

 

10. AuthenticationManager는 AuthenticationFilter에 Authentication객체를 전달한다

 

11. AuthenticationFilter는 Authentication을 SecurityContext(보관소)에 저장한다

클래스나 메서드 위치에 상관없이 전역적으로 SecurityContext에서 사용자 정보를 꺼내올수 있다

 


 

 

 

Authorization


 

1. 인증 또는 인가에서 예외발생시 ExceptionTranslationFilter에서 처리한다

 

2. FilterSecurityInterceptor 호출

인가에 권한이 있는지 없는지 판단하는 Filter 

 

3. FilterSecurityInterceptor가 가진 AccessDecisionManager 클래스가 있는데

AccessDecisionManager는 접근을 허가할 것인지 판단하는 클래스

 

4. AccessDecisionVoter는 현재 사용자가 접근을 하고자하는 자원이 궈한이 있는지 없는지 투표하는 클래스

얘가 허가할지 거부할지 보류할지 이런 결과를 투표해서 다시 AccessDecisionManager에게 전달

 

5. 투표 결과에 따른 후속처리를 FilterSecurityInterceptor에서 해준다


 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함