SPRING/SPRING SECURITY(20)
-
Spring Security - 세션 고정 보호 API
세션 고정 공격이란? 공격자가 서버에 접속하여 세션쿠키를 얻어낸뒤, 사용자에게 해당 세션쿠키를 심어둡니다. 이런 상황에서 사용자가 서버에 로그인 인증을 시도하게 되면 같은 세션쿠키를 사용하고 있기 때문에 사용자 정보를 공격자가 접근할 수 있는 상태가 됩니다. 세션 고정 보호 이를 방지하기 위해 사용자가 로그인 인증을 할 때, 세션 ID를 변경한다면 공격자와 사용자의 세션쿠키 정보가 달라지기 때문에 세션 고정 공격을 방지할 수 있습니다. 사용 예제 1 2 3 4 http.sessionManagement().sessionFixation().none(); http.sessionManagement().sessionFixation().changeSessionId(); http.sessionManagement()...
2021.04.15 -
Spring Security - 동시 세션 제어 API
사용 예제 1 2 3 4 5 6 http .sessionManagement() // 세션 관리 기능 동작 .maximumSessions(1) // 동시 세션 최대 갯수, -1일시, 무제한 허용 .maxSessionsPreventsLogin(false) // false이면 기존 세션 만료처리(default), true이면 인증하려는 세션 차단 .expiredUrl("/expired") // 세션 만료되면 이동할 URL ; Colored by Color Scripter cs 같은 계정으로 다른 PC 혹은 브라우저에서 로그인을 하면 Spring Security는 어떻게 동작할까? 두 가지 정책이 있다. 1. 기존 세션을 만료처리하여 새로 인증하려는 세션을 허용하는 정책(기본값) 2. 기존 세션은 그대로 유지하..
2021.04.15 -
Spring Security - 익명 사용자 인증, AnonymousAuthenticationFilter
AnonymousAuthenticationFilter 플로우 Spring Security는 인증을 받지않은 사용자도 익명 사용자 인증객체를 생성하여 관리한다. AnonymousAuthenticationFilter는 인증 객체가 SecurityContext에 존재하지 않는 경우 AnonymousAuthenticationToken을 생성하고 SecurityContext에 저장한다. 이렇게 SecurityContext에서 관리가 되면, 후에 isAnonymous()와 isAuthenticated()로 인증 사용자와 익명 사용자를 구분할 수 있게된다. 익명 인증객체를 세션에 저장하지는 않는다.
2021.04.15 -
Spring Security - Remember me, 자동 로그인 API, RememberMeAuthenticationFilter
사용 예제 1 2 3 4 5 6 7 http .rememberMe() .rememberMeParameter("remember") // rememberme 파라미터. 기본값은 remember-me .tokenValiditySeconds(3600) // 유효기간 설정. 기본값은 14일 .alwaysRemember(true) // 사용자가 remember me를 체크하지 않아도 true이면 항상 remember me 작동. .userDetailsService(userDetailsService) // 사용자 정보를 조회함. 정보를 어디에 저장했느냐에 따라 다양한 구현체 존재. ; Colored by Color Scripter cs RememberMeAuthenticationFilter 흐름 RememberMeA..
2021.04.15 -
Spring Security - Logout 흐름, LogoutFilter
로그아웃 요청이 온다 LogoutFilter가 요청을 받아 RequestMatcher로 요청정보 매칭을 확인한다. 요청정보가 매칭되면 SecurityContext에서 인증객체를 가져와 LogoutHandler를 실행한다. Spring Security는 이미 여러 핸들러를 만들어놨고, 각 핸들러에서 로그아웃시 필요한 세션 무효화, 쿠키삭제, SecurityContext에서 인증객체 삭제 등 기본 작업을 수행한다. 이 때, 사용자가 정의한 핸들러(addLogoutHandler())도 같이 수행된다. 로그아웃이 성공하면 성공 핸들러(logoutSuccessHandler())가 수행된다.
2021.04.15 -
Spring Security - Logout API
사용 예제 123456789101112131415161718http .logout() // 로그아웃 기능 작동 .logoutUrl("/logout") //로그아웃 페이지 .logoutSuccessUrl("/login") // 로그아웃 성공 후 이동할 URL .deleteCookies("JSESSIONID", "remember-me") // 로그아웃 후 삭제할 쿠키 .addLogoutHandler(new LogoutHandler() { @Override public void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) { //로그아웃시 추가적..
2021.04.15