Java/Spring Security 7

CORS 설정

CORS(Cross Origin Resource Sharing) CORS란 서로 다른 출처의 요청이더라도 서버의 리소스를 사용할 수 있도록 해주는 설정이다. 항상 SecurityFilterChain에 csrf().disable() 만을 사용하다가 팀 프로젝트를 앞두고 좀더 보안이 강화된 CORS 설정이 필요할 것 같아 알아보게 되었다. 찾아낸 방법으로는 3가지가 있었다. Spring MVC의 Controller에 직접 CORS 설정 Spring MVC에서 WebMvcConfigurer를 구현하는 설정 bean 등록 Spring Security에서 설정 bean 등록 방법 1. Spring MVC의 Controller에 직접 CORS 설정 제일 직관적인 방법이다. @RestController @CrossO..

JWT

JWT를 알아보기 전에 Token기반과 Session기반 인증의 차이에 대해 알아보자. 세션 기반 자격 증명 방식 세션 기반 자격 증명 방식은 서버 측에 인증된 사용자의 정보를 세션 형태로 세션 저장소(DB)에 저장하는 방식이다. 즉, 클라이언트 측에서 서버 측으로 요청이 들어오면 서버 측에서는 사용자를 식별하기 위해 세션 저장소에 저장된 세션 정보와 사용자가 제공하는 세션이 일치하는지 확인하는 인증 작업을 거친 뒤 인가 처리를 진행한다. 세션 기반 자격 증명의 특징 세션은 인증된 사용자 정보를 서버 측 세션 저장소(DB)에서 관리한다. 생성된 사용자 세션의 고유 ID인 세션 ID는 클라이언트의 쿠키에 저장되어 request 전송 시, 인증된 사용자인지를 증명하는 수단으로 사용된다. 세션 ID만 클라이언..

DelegatingPasswordEncoder

DelegatingPasswordEncoder DelegatingPasswordEncoder는 Spring Security에서 지원하는 PasswordEncoder 구현 객체를 생성해 주는 컴포넌트로써 DelegatingPasswordEncoder를 통해 애플리케이션에서 사용할 PasswordEncoder를 결정하고, 결정된 PasswordEncoder로 사용자가 입력한 패스워드를 단방향으로 암호화해준다. // PasswordEncoder 객체 생성 PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); // PasswordEncoder 사용 passwordEncoder.matches((Str..

SecurityFilterChain과 AuthenticationProvider 구현

SecurityFilterChain HttpSecurity 인스턴스를 매개변수로 받아 SecurityFilterChain으로 만들어준다. 이전 포스트, Spring Security Filter의 동작 흐름에 기재된 것과 같이 SecurityFilterChain은 DelegatingFilterProxy와 FilterChainProxy를 통해 Servlet filter와 연결된다. @Configuration public class SecurityConfiguration { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ http .headers().frameOptions().sameOrigin() // (1) ..

Spring Security의 인증 처리 흐름

이전 포스트에서 클라이언트의 요청이 Spring Security Filter까지 도달하는 과정을 포스트 했었다. 이번 포스트에서는 도달한 사용자의 인증 요청이 Spring Security Filter Chain의 특정 Filter에 도달했을 때, Spring Security의 컴포넌트들이 어떤 과정을 거쳐 사용자의 인증 요청을 처리하는지 그 흐름에 대해 포스트 할 예정이다. Spring Security의 인증(Authentication) 처리 흐름 위의 그림은 개발자가 지정한 특정한 URL(로그인)으로 포스트요청이 들어왔을때의 처리 흐름이다. 먼저 (1)에서 사용자가 로그인 폼 등을 이용해 Username(로그인 ID)과 Password를 포함한 request를 Spring Security가 적용된 애플..

Spring Security Filter의 동작 흐름

Spring Security Filter를 알기 전에 웹요청의 처리 흐름에 대해 먼저 알아야 한다. Servlet의 FilterChain 서블릿기반 어플리케이션의 경우, 클라이언트에서 웹요청이 들어오면 서블릿 컨테이너는 해당 요청을 DispetcherServlet으로 보내기 이전에 FilterChain을 생성한뒤 HttpServletRequest를 진행한다. 이때 FilterChain을 구성하는 요소들이 Filter이다. 이때 하나의 서블릿은 하나의 HttpServletRequest와 HttpServletResponse를 제어하며 이를 위해 여러 Filter들이 사용될 수 있다. DelegatingFilterProxy Servlet filter가 Servlet container 안에 존재하는 것과 달리 ..