qordpsem 2024. 9. 28. 19:44

filter 기반

내부에서 filter chian 만들어서 끼워넣음

 

 

인증처리과정

Security Context Holder 안에

Security Context 안에

Authentication 안에

Principal, Credentials, Authorities  있음

 

Principal : User 식별자 (User Id, Email 같은 정보 담고있는 객체)

Credentials : Password 같은 중요한 정보 (유출방지를 위해 인증 후 삭제)

Authorities : 권한정보. 보통 Role 이나 Scope 로 설정

 

 

jwt 사용하기 전 jjwt dependency 추가하기,, (jwt 생성, 검증, 암호화 해줌)

 

 


 

 

Spring Security에서 기본적으로 제공하는 Filter 종류 (logging>level>irg>security:debug 로 확인가능)

 

 

#SecurityContextHolderFilter

SecurityContext 객체를 생성, 저장, 조회하는 역할 (없으면 안됨!)

 

#CsrfFilter

csrf 공격을 막는 필터

csrf는 쿠키/세션 기반으로 인증할때 많이 일어날 수 있는 공격이라 jwt 사용 시 꺼도 괜찮을듯

 

#LogoutFilter

설정된 로그아웃 url(default:/logout)로 요청 들어오면 세션 무효화하고, 쿠키 삭제하고, SecurityContext 비우는 역할 함

 

#UsernamePasswordAuthenticationFilter

설정된 로그인 URL (default: /login)로 요청 들어오면 username과 password 비교해서 실제 인증 수행하는 Filter

마무리되면 SecurityContext에 인증 성공한 Authentication 객체가 저장됨

 

#DefaultLoginPageGeneratingFilter, DefualtLogoutPageGeneratingFilter

로그인, 로그아웃 페이지 띄우는 필터

 

#SecurityContextHolderAwareRequestFilter

SecurityContext에 저장된 정보로부터 request 구성해주는 필터

 

#AnonymousAuthenticationFilter

익명 사용자에 대한 인증처리필터

앞단 필터에서 SecurityContext에 Authentication 객체 없으면 Authentication 구현체 중 하나인 AnonymousAuthenticationToken을 SecurityContext에 설정함

 

#AuthorizationFilter

권한 확인하는 필터

 

 

위 필터들은 작성한 순서대로 진행됨

#인증을 위한 필터 추가하려면 어디에 추가해야할까?

SecurityContextHolderAwareRequestFilter 보다는 앞에, SecurityContextHolderFilter 보다는 뒤에 와야 함

그래야 SecurityContext의 생명주기나 관련 기능과 무관하게 SecurityContext에 Authentication 객체 담을 수 있음