웹 프로그래밍/[ Spring Security ] 8

[ Spring Security ] 07. 주요 아키텍쳐 : DelegatingFilterProxy & FilterChainProxy

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. Spring Security 주요 아키텍쳐 DelegatingFilterProxy Filter는 Servlet 2.3부터 제공되는 기술이다. 필터의 역할은 어떤 요청이 있을 때 이 요청이 실제로 서블릿으로 들어오는데, 서블릿 자원에 들어오기 전에 처리를 하는 곳이 필터. 요청에 대한 최종적인 접근 전, 후로 어떤 처리를 할 수 있도록 하는 기술이 필터이다. 이 필터는 서블릿 스펙에 있는 기술이기 때문에 Servlet 컨테이너에서 생성되고 실행이 되기 때문에, 필터는 Spring에서 만든 Bean을 Injection..

[ Spring Security ] 06. CSRF Filter

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. CSRF 사이트 간 요청 위조 공격 CSRF란 사용자의 의도와는 무관하게 공격자가 심어놓은 행위로, 공격자가 의도한대로 응답하는 공격이다. 그래서 Spring-Security는 이런 취약점을 방지하기 위한 API를 제공한다. CsrfFilter CSRF의 취약점을 방지하는 필터이다. 모든 요청에 랜덤하게 생성된 토큰을 HTTP 파라미터로 요구한다. 요청 시 전달되는 토큰 값과 서버에 저장된 실제 값과 비교한 후 만약 일치하지 않으면 요청은 실패한다. Client 서버의 자원에 접근할 때는 HTTP 메소드(PATCH..

[ Spring Security ] 05. 인증/인가 API의 예외처리

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. 인증/인가 API ExceptionTranslationFilter FilterSecurityInterceptor(맨 마지막에 위치)가 이를 호출한다 ExceptionTranslationFilter 필터는 아래 두가지 예외를 처리하고 있다. AuthenticationException 인증 예외 처리 AuthenticationEntryPoint 호출 로그인 페이지 이동 401 오류 코드 전달 등 인증 예외가 발생하기 전의 요청 정보를 저장 RequestCache : 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내..

[ Spring Security ] 04. 인가 API와 표현식

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. 인가 API [ 권한설정과 표현식 ] 선언적 방식 URL http.antMatchers("/users/**").hasRole("USER") Method @PreAuthorize("hasRole('USER')") public void user() { System.out.println("user"); } 동적 방식 (DB 연동 프로그래밍) URL Method > 권한 설정 protected void configure(HttpSecurity http) throws Exception { http .antMatcher("/..

[ Spring Security ] 03. 동시 세션제어와 세션 고정보호, 세션 정책 관리

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. [ 동시 세션 제어, 세션 고정 보호, 세션 정책 ] > 동시 세션 제어 동일한 계정으로 인증을 받을 때 생성되는 세션에 허용 개수가 초과 되었을 경우 어떻게 세션을 유지하는 지에 대한 제어를 말한다. Spring-Security에서는 두 가지 전략으로 동시세션제어를 하게 된다. default 최대 세션 허용 개수 : 1개 동일한 계정으로 들어온 사용자에 대해서 세션 허용 개수 이전 사용자 세션 만료 사용자 1의 세션은 만료 되고 사용자 2의 세션은 사용가능 하다. 현재 사용자 인증 실패 뒤늦게 들어온 사용자 2의..

[ Spring Security ] 02. 익명 사용자 인증처리 필터 : AnonymousAuthenticationFilter

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. 익명 사용자 인증처리 필터 익명 사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용되는 필터. 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated()로 구분해서 사용한다. (login / logout 과 같은 기능을 나누어서 처리 가능) 인증객체를 세션에 저장하지 않는다. 어떤 사용자가 인증을 받았을 때, 세션에 사용자의 유저 객체를 저장을 한다. 사용자가 어떤 자원에 접근하려고 하면 이 사용자가 저장한 유저 ..

[ Spring Security ] 01. Remember-Me 인증이란?

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. [ Remember Me 인증 ] : RememberMeAuthenticationFilter Remember-Me ? 세션이 만료되고 웹 브라우저가 종료된 이후에도 어플리케이션이 사용자를 기억하는 기능 Remember-Me 쿠키에 대한 Http 요청을 확인한 후에 토큰 기반 인증을 사용해서 유효성을 검사하고 토큰이 검증되면 사용자는 로그인 된다. 사용자 Life Cycle 인증 성공(Remember-Me 쿠키 설정) 인증 실패(쿠키가 존재하면 쿠키 무효화) 로그아웃(쿠키가 존재하면 쿠키 무효화) protected ..

[ Spring Security ] 00. LoginForm 인증 API 및 Filter의 이해

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. [ Login 인증 ] UsernamePasswordAuthenticationFilter SecurityContext : 인증 필터가 사용자의 인증을을 가지고 있는 Context SecurityContextHolder.getContext().getAuthentication() : 어디서든 현재 어떤 인증을 받았는지 볼 수 있다. protected void configure(HttpSecurity http) throws Exception { http.formLogin() .loginPage("/login.html")..