Spring Security

인증 관련 Architecture 분석

iksadnorth 2023. 9. 1. 20:13

👣 개요

Spring Security를 다루면서 들었던 의문점들을 해소하고자 
해당 게시물을 작성하게 되었다.
해당 게시물에서는 인증 과정에서 일어나는 과정들을 상세히 다루고자 하며
Spring Security 내에서 일어나는 이벤트들에 중점적으로 다루며
코드 분석 중심으로 작성한다.

 

👣 Architecture

인증 과정 순서는 그림에 명시되어 있어서 설명은 생략한다.

 

👣 UserDetailsService 구현은 항상 요구되는 것인가?

 

UserDetailsService 구현은 항상 요구되는 것인가?

👣 개요 나의 의문점은 UserDetailsService와 UserDetails 인터페이스는 모든 AuthenticationProvider에서 요구하냐는 것이었다. 때문에 관련 질문을 ChatGPT에게 물어봤다. 물론 답변은 이렇게 나왔으나 ChatGPT는

ikadnorth.tistory.com

결론 :
항상 요구하는 것은 아니다. DaoAuthenticationProvider만 UserDetailsService를 요구한다고 볼 수 있다.

 

👣 AuthenticationProvider를 내 맘대로 커스터마이징할 수 있을까?

 

AuthenticationProvider를 내 맘대로 커스터마이징할 수 있을까?

👣 개요 결국 UserDetailsService를 사용하고 싶지 않아도 UsernamePasswordAuthenticationToken을 사용한다면 어쩔 수 없이 UserDetailsService를 사용해야 한다는 것이다. 만약 JWT에 Username을 넣으면 안 된다거나 Id

ikadnorth.tistory.com

결론 :
기존에 있던 UsernamePasswordAuthenticationToken을 상속한 새로운 Authentication 객체를 사용하면 AuthenticationProvider를 커스터마이징할 수 있다. 하지만 굳이? 라는 생각이 든다.
차라리 Filter를 새로 하나 확장해서 커스터마이징 하는 것이 맘편할 수 있다.

 

👣 인증 필터는 어떻게 재정의할 수 있을까?

 

인증 필터는 어떻게 재정의할 수 있을까?

👣 인증 필터의 업무 파악 우선 인증 필터가 수행해야 하는 업무를 나열하면 다음과 같다. 인증 전 AuthenticationToken을 만들기 해당 Authentication Token을 AuthenticationManager에게 위임해서 인증된 Authentic

ikadnorth.tistory.com

결론 :
Filter를 상속해서 밑바닥부터 커스터마이징할 수도 있지만
AbstractAuthenticationProcessingFilter를 상속하면
단순히 인증 과정에만 관여할 수 있기 때문에 난이도가 급하강한다.