분류 전체보기 1341

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - 사이트 간 요청 위조(CSRF, CsrfFilter)

쇼핑몰 입장에서는 인증이 완료된 사용자의 쿠키가 있기 때문에 정상적인 인증이라고 생각한다. CSRFFilter 모든 요청에 랜덤하게 생성된 토큰을 HTTP 파라미터로 요구 요청 시 전달되는 토큰 값과 서버에 저장된 실제 값과 비교한 후 만약 일치하지 않으면 요청은 실패한다 Client HTTP 메소드 : PATCH, POST, PUT, DELETE Spring Security http.csrf() : 기본 활성화되어 있음 http.csrfhttp.csrf(). disabled() : 비활성화 @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterCh..

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - 예외 처리 및 요청 캐시 필터(ExceptionTranslationFilter, RequestCacheAwareFilter)

ExceptionTranslationFilter AuthenticationException 인증 예외 처리 AuthenticationEntryPoint 호출 로그인 페이지 이동, 401 오류 코드 전달 등 다시금 인증을 실행하도록 해준다. 인증 예외가 발생하기 전의 요청 정보를 저장 인증을 하기 전의 요청했던 자원정보를 인증이 완료가 되면 해당 자원으로 이동할 수 있도록 캐시에 자원을 저장한다. RequestCache - 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내 오는 캐시 메커니즘 SavedRequest - 사용자가 요청했던 request 파라미터 값들, 그 당시의 헤더 값들 등이 저장 AccessDeniedException 인가 예외 처리 AccessDeniedHandler에서 예외 처리하..

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - 권한설정과 표현식

선언적 방식 URL http.antMatchers("/users/**"). hasRole(“USER") Method @PreAuthorize(“hasRole(‘USER’)”) public void user(){ System.out.println(“user”)} 주의 사항 - 설정 시 구체적인 경로가 먼저 오고 그것보다 큰 범위의 경로가 뒤에 오도록 해야 한다 위에서부터 아래로 순차적으로 인가 심사를 해주는데 큰 범위가 먼저 오게 되면 큰 범위를 먼저 실행하여 작은 범위가 실행이 안된다. 요청정보에 매칭이 되는 자원에만 인가심사를 하겠다는 의미이다. access를 사용해서 좀 더 쉽게 표현식을 사용해서 표기 가능하도록 도와준다. 익명 사용자와 인증된 사용자 모두 접근하기 위해서는 anomyous가 아닌 p..

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - 세션 제어 필터(SessionManagementFilter, ConcurrentSessionFilter)

SessionManagementFilter 세션 관리 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리 동시적 세션 제어 동일 계정으로 접속이 허용되는 최대 세션수를 제한 세션 고정 보호 인증할 때마다 세션 쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지 세션 생성 정책 Always, If_Required, Never, Stateless ConcurrentSessionFilter 매 요청 마다 현재 사용자의 세션 만료 여부 체크 세션이 만료로 설정되었을 경우 즉시 만료 처리 session.isExpired() == true 로그아웃 처리 즉시 오류 페이지 응답 SessionManagermentFilter 가 이전 사용자 세션 만료 정책을 쓰고 있다면 이전 사용자 세션을 만료시킨다. ..

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - 동시 세션 제어, 세션 고정 보호, 세션 정책

이전 사용자 세션 만료 전략 최대 세션 허용 개수가 초과될 경우 이전 사용자 세션을 만료시켜 버린다.(사용자 2만 유지) 현재 사용자 인증 실패 최대 세션 허용 갯수가 초과될 경우 현재 사용자가 로그인하게 되면, 인증 실패를 시킨다.(사용자 1만 유지) maxSessionsPreventsLogin(true) : 2번 전략(1번 전략은 false) invalidSessionUrl과 expiredUrl 이 동시에 켜져 있을 경우 invalidSessionUrl 전략을 따른다. 세션 고정 보호 사용자가 공격자가 제공하는 JSessionId로 접속하여 사용자의 정보를 공격자가 다 알 수 있다. SpringSecurity에서는 이를 방지하기 위해 로그인할 때마다 새로운 세션 ID를 발급해 준다(세션 고정 보호) ..

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - 익명사용자 인증 필터(AnonymousAuthenticationFilter)

익명사용자 인증 처리 필터 익명사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용 SecurityContext 안에 익명사용자용 AuthenticationToken 인 AnonymousAuthenticationToken을 발급하여 SecurityContext에 넣어준다. 다른 코드 곳곳에서 AuthenticationToken이 없으면 Exception이 발생하기 때문에 익명사용자라도 해당 토큰을 넣어주는 것이다. 인증객체를 세션에 저장하지 않는다(실제 인증을 받은 객체가 아니기 때문에 저장할 필요가 없다)

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - Remember Me 인증 필터(RememberMeAuthenticationFilter)

RememberMeAuthenticationFilter 인증이 완료된 사용자는 SecurityContext에 인증 객체를 가지고 있는데 세션이 끊어지거나, 만료될 경우 SecurityContext가 존재하지 않기 때문에 RememberMeAuthenticationFilter가 동작하게 된다. 정상작동 동작 조건 SecurityContext가 Null 일 경우 RememberMe 쿠키값은 가지고 있을때 RememberMeServices TokenBasedRememberMeServices : 메모리에 저장된 토큰과 사용자가 가지고 온 토큰과 비교하여 인증 처리한다. PersistentTokenBasedRememberMeServices : DB에 토큰을 저장하고 사용자가 가지고온 토큰과 비교하여 인증 처리한다.

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - Remember Me 인증

세션이 만료되고 웹 브라우저가 종료된 후에도 애플리케이션이 사용자를 기억하는 기능 Remember-Me 쿠키에 대한 Http 요청 을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인된다된다 사용자 라이프 사이클 인증 성공(Remember-Me쿠키 설정) 인증 실패(쿠키가 존재하면 쿠키 무효화) 로그아웃(쿠키가 존재하면 쿠키 무효화) rememberMeParameter : 파라미터를 변경해준다(기본값 = remember-me) tokenValiditySeconds : 만료시간을 설정해준다(기본값 = 14일) userDetailsServeice : User 계정을 조회하는 서비스 등록 RememberMe가 없을 경우에는 기본적으로 JSessionId 값을 통해 로그인이 ..

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - Logout 처리, LogoutFilter

http .logout() .logoutUrl("/logout") //logout은 기본적으로 post로 처리해준다. .logoutSuccessUrl("/login") //로그아웃 성공시 해당 url 이동 .addLogoutHandler(new LogoutHandler() { @Override public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { HttpSession session = request.getSession(); session.invalidate(); } }) //로그아웃 후속동작을 시킬수 있다 .logoutSuccessHandler( new Logou..

Ch01. 스프링 시큐리티 기본 API 및 Filter 이해 - Form Login 인증 필터(UsernamePasswordAuthenticationFilter)

UsernamePasswordAuthenticationFilter AntPathRequestMatcher(/login) 요청 정보가 매칭 돼있는지 확인한다(매칭 돼있지 않다면 doFilter실행) 기본값은 /login 이고, .loginProcessingUrl() 로 변경이 가능하다 Authentication(Username + Password) 해당 인증 객체를 만들어 인증처리를 AuthenticationManager에 맡긴다. AuthenticationManager AuthenticationProvider에 인증처리를 위임한다. AuthenticationProvider 인증을 위임받아 인증이 성공하면 Authentication 객체를 생성해주고, 실패 시, AuthenticationException에..