본문 바로가기

Spring Security4

Spring Security & CSRF & Json Web Token JWT 사용 시 Spring Security 에서 csrf.disable() 을 해도 괜찮은 이유는 무엇일까? 에 대해서 심각하게 고민하게되어 정리하게 되었다. Cross-Site Request Forgery 웹 애플리케이션의 취약점 중 하나로, 이용자가 의도하지 않은 요청을 통한 공격을 의미한다. 즉, CSRF 공격이란, 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(등록, 수정, 삭제 등)를 특정 웹사이트에 요청하도록 만드는 공격이다. 예시 로그인한 계정에서 다른 은행 계좌로 돈을 송금할 수 있는 은행 웹사이트 제작 예시. Form 형식 Http 요청 POST /transfer HTTP/1.1 Host: bank.example.com Cookie: JSESSIONID=rand.. 2021. 12. 24.
Authentication과 SecurityContextHolder 인증이 된 Authentication 객체는 어떻게 되는가? → SecurityContextHolder 에 들어가서 Application 전반에 걸쳐 사용할 수 있게 된다. AuthenticationManager가 인증을 마친 뒤 Return 받은 Authentication 객체가 언제 SecurityContextHolder에 저장되는가? SecurityContextPersisteneceFilter.class SecurityContext를 Http session에 캐시하여 여러 요청에서 Authentication을 공유하는 필터 SecurityContextRepository를 교체하여 세션을 HTTP session이 아닌 다른 곳에 저장하는 것도 가능하다. SecurityContextPersistenec.. 2021. 6. 3.
AuthenticationManager와 Authentication Spring Security에서 인증(Authentication)은 AuthenticationManager가 한다. 인자로 받은 Authentication이 유효한 인증인지 확인하고 Authentication객체를 리턴한다. 인증을 확인하는 과정에서 비활성 계정, 잘못된 비번, 잠긴 계정 등의 에러를 던질 수 있다. AuthenticationManager의 구현체는 ProviderManager다. [ProvideManager.class] ProviderManager의 Authentication 객체에는 Principal의 username과 password 만이 들어온다. 해당 요청에 대한 인증을 처리할 수 있는 Provider를 찾아 이를 처리한 뒤 인증정보가 담긴 Authentication 객체를 반환.. 2021. 6. 2.
SecurityContextHolder와 Authentication SecurityContextHolder SecurityContext 제공, 기본적으로 ThreadLocal을 사용한다. ThreadLocal 이란? 한 쓰레드 내에서 Share 하는 저장소 → 즉, 메소드 파라미터를 사용하지 않아도 한 쓰레드 내에서 공유하기 때문에 데이터에 접근할 수 있다. SecurityContext Authentication 제공 Authentication Principal과 GrantAuthority 제공 Principal "누구"에 해당하는 정보 UserDetailsService에서 리턴한 객체 객체는 UserDetails 타입 GrantAuthority ROLE_USER, ROLE_ADMIN 등 Principal이 가지고 있는 권한을 나타낸다. 인증 이후, 인가 및 권한 확인할.. 2021. 6. 2.