spring security
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 객체 담을 수 있음