목록스프링/스프링 시큐리티 (18)
경주장
AuthenticationFilter Filter는 AuthenticationManager에게 UsernamePasswordAuthenticationToken 첫번째 생성자 (id, password)를 통해 인증 토큰을 생성하여 인증의 책임을 위임합니다. AuthenticationManager의 구현체 ProviderManager는 중요하게는 아래의 두가지 필드를 가지고 있습니다. private List providers; private AuthenticationManager parent; providers는 실질적으로 인증을 담당할 AuthenticationProvider를 List로 가지는 필드입니다. AuthenticationManager는 자신과 같은 타입의 객체를 parent란 이름으로 부모로 ..
SecurityContext Authentication 객체가 저장되는 보관소 ThredLocal에 저장되어 아무 곳에서나 참조가 가능하도록 설계함 Authentication authentication = SecurityContextHolder.getContext().getAuthentication() SecurityContextHolder SecurityContext 객체 저장소 SecurityContext 객체 저장하는 방식 MODE_THREADLOCAL : 스레드당 SecurityContext 객체를 할당, Default MODE_INhERITABLETHREADLOCAL : 메인 스레드와 자식 스레드에 관하여 동일한 SecurityContext를 유지 MODE_GLOBAL : 응용 프로그램에서 단 ..
스프링 시큐리티에서 인증 토큰(객체)으로 활용되는 것은 Authentication(인증)객체입니다. package org.springframework.security.core; import ... public interface Authentication extends Principal, Serializable { Collection
SpringSecurity에서는 다중 설정 클래스를 지원합니다. 여러 설정파일을 생성하여 모두 WebSecurityConfigurationAdapter를 상속받아 요청에 따라 필터기반의 보안처리를 다르게 할 수 있습니다. 요청에따른 적용은 설정 클래스의 requsetMatcher 파라미터와 @Order 어노테이션의 값에 따라 정해집니다. 설정 클래스의 requsetMatcher는 configure 매서드를 override하여 설정합니다. 따로 설정하지 않는다면 any requset에 대해서 적용됩니다. @EnableWebSecurity @Order(2) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protecte..
서블릿 스펙에 정의된 Fliter는 Servlet Container에서 생성되고 실행된다. 따라서 Filter는 Spring Bean을 Injection받아 사용할 수 없다. 아래의 배경에 따라 DelegatingFilterProxy와 FilterChainProxy가 등장하게 된다. Filter도 Spring Bean으로 편하게 등록하고 주입하고 싶다! Filter도 Spring의 기술을 활용하고 싶다. DelegatingFilterProxy - 서플릿 필터, FilterChainProxy - 필터 빈 두가지 클래스를 통해 두가지 요구사항을 충족할 수 있게 된다. DelegatingFilterProxy는 서플릿 필터로써 약속된 이름 (springSecurityFilterChain)이라는 이름의 Sprin..
사이트 간 요청 위조 Cross Site Request Forgery(CSRF)는 사용자가 인증받은 웹 어플리케이션에서 원하지 않는 action을 하도록 하는 공격입니다. 공격 시나리오 1. 사용자는 웹 사이트(vulnerable.com)에 접속하여 정삭적인 쿠키를 발급받습니다. 2. 공격자는 악성 html 페이지가 장성된 페이지의 링크(vulnerable.com/post/my-bad-post)를 이메일, 게시판 등의 경로를 이용해 전달합니다. 3. 공격용 HTML 페이지는 사용자가 인증한 웹 사이트의 요청정보를 이미지 태그로 전달합니다. 4. 이용자가 공격용 웹 페이지를 열면, 브라우저는 이미지 파일을 받아오기 위해 공격용 url을 엽니다. 5. 이미 웹 사이트(vulnerable.com)의 인증을 받..
ExceptionTranslationFilter - 예외 처리 필터 - AuthenticationException : 인증 예외 AuthenticationEntryPoint 호출 - 로그인 페이지 이동/ 401 오류 코드 전달 등 인증 예외가 발생하기 전의 요청 정보를 저장 RequestCache - 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내오는 캐시 메커니즘 SavedRequest - 사용자가 요청했던 request 파라미터 값들, 헤더 값 등이 저장 - AccessDeniedExeption : 인가 예외 AccessDeniedHandler에서 예외 처리 하도록 제공 http.exceptionHandling() - 예외 처리 기능 설정 http.exceptionHandling() .authe..
스프링 시큐리티의 권한 설정은 애플리케이션 빌드 순간에 결정되는 선언적 방식과 애플리케이션 구동중에 동적으로 설정하는 방식 두가지를 지원하며 각각 권한의 적용 범위로써 URL, Method를 설정 할 수 있다. 선언적 방식 URL http.antMatchers("/users/**").hasRole("USER) Method @PreAuthorize("hasRole("USER")") 동적 방식 - DB 연동 프로그래밍 URL/Method - To be Studied... http .antMatcher("/shop/**") .authorizeRequests() .antMatchers("/shop/login", "/shop/users/**").permitAll() .antMatchers("/shop/mypage..
SessionManagementFilter 수행하는 역할 1.세션 관리 - 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리 2.동시적 세션 제어 - 동일 계정으로 접속이 허용되는 최대 세션수를 제한 -여기서 session.expiredNow( )로 세션을 만료 시키면 ConccurentSessionFilter에서 확인 후 처리 3.세션 고정 보호 - 인증 할 때마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지 4.세션 생성 정책 - Always, If_Required, Never, Stateless ConcurrentSessionFilter •매 요청 마다 현재 사용자의 세션 만료 여부 체크 •세션이 만료로 설정되었을 경우 즉시 만료 처리 - session.isExpired..
세션 고정보호 공격자가 자신의 SessionID를 사용자의 Cookie에 심어 공격자의 세션 쿠키로 사용자가 로그인을 하면 서버에서는 공격자의 SessionID로 인증한 것과 마찬가지로 처리된다. 공격자는 사용자의 리소스를 접근할 수 있게 된다! 이 공격은 세션 고정 공격이라고 불린다. 이때 매 인증시 Session을 생성하거나 SessionID만 변경하는 것으로 해당 공격을 방어 할 수 있다. http .sessionManagement() .sessionFixation() : 세션 고정 정책 설정 http.sessionManagement() .sessionFixation() .changeSessionId();// 기본 값 - 인증 시 세션 아이디만 변경 //.migrateSession();// 서블릿 ..