AnonymousAuthenticationFilter Authentication 객체가 없는 Client를 접근을 막는 것이 아니라 권한이 없는 상태로도 접근을 할 수 있게 하는 Filter 익명사용자 인증처리하는 Filter 익명사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용 화면에서 인증 여부를 구현할 때 isAnonymous()와 isAuthenticated() 로 구분해서 사용 인증객체를 세션에 저장하지 않음. Client가 서버에 접근함. AnonymousAuthenticationFilter가 SecurityContext에 인증객체 이 있는지 없는지 확인함. 인증 객체가 있다면 chain.doFilter를 수행 인증객체가 없는 Client는 익명사용자용 AuthenticationTok..
Remember Me 인증 흔히 우리가 보고 있는 내 계정 기억하기 기능을 말함. 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능 Remember-Me 쿠키에 대한 Http 요청을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인이 된다. 사용자 라이프 사이클 인증성공(Remember-Me 쿠키 설정) 인증실패(쿠키가 존재하면 쿠키 무효화) 로그아웃(쿠키가 존재하면 쿠키 무효화) RememberMeAuthenticationFilter Authentication이 SecurityContext에 저장이 되어 있지 않다면 또는 Form 로그인으로 로그인시 RememberMe 체크박스에 클릭을 하여 접속하여 Client가 쿠키를 가지고 있다면..
Logout Flow Client가 POST 방식으로 /logout url로 접근함. Server가 세션을 무효화, 인증토근 삭제, 쿠키정보 삭제 Client 화면을 로그인 페이지로 이동. Logout Config Code .logout : 로그아웃 기능을 사용 .logoutUrl("/logout") : 로그아웃 진행을 하려면 해당 경로로 접근을 해야함. .logoutSuccessUrl("/login") : 로그 아웃이 완료되면 해당 경로로 이동함. .addLogoutHandler(new LogoutHandler() {} : 로그아웃시 session 삭제 작업을 수행하는 handler .logoutSuccessHandler(new LogoutSuccessHandler() {} : 로그아웃 완료시 원하는 ..
UsernamePasswordAuthenticationFilter UsernamePasswordAuthenticationFilter 1. 사용자가 로그인을 하려고 시도 하면 UsernamePasswordAuthenticationFilter가 유효한 경로인지 확인 2. 앞에 보낸 url 정보가 AntPathRequestmatcher에 있는 url과 동인한지에 따라 yes, no를 구분함. 3. url매칭이 되면 UsernamePasswordAuthenticationFilter가 username과 password를 가지고 Authentication 객체를 만듬. 4. AthenticationManager에 사용자 인증요청을 함. AthenticationManager(인증작업을 수행) 5. Athenticat..
스프링 시큐리티 의존성 추가 및 기능 의존성 추가하는 코드 (pom.xml에 추가) org.springframework.boot spring-boot-starter-web 서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다. 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동함. 모든 요청은 인증이 되어야 자원에 접근이 가능하다. 인증 방식은 폼 로그인 방식과 httpBasic로그인 방식을 제공한다. 기본 로그인 페이지 제공한다. 기본 계정 한 개 제공한다. - username (user)/ password (랜덤) 인증 API - 사용자 정의 보안 기능 구현 WebSecurityConfigurerAdapter 메소드 configure(HttpS..
JWT JWT는 유저를 인증하고 식벽하기 위한 인증 방식이다. 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜 수 있다. JWT가 가진 핵심적인 특징이 있다면, 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 개인 정보가 포함이 되어 있다는 것(Self-Contained)이다.사용자가 가져야하는 데이터가 많아지면 당연히 토큰이 가지고 있어야하는 양도 커져야 하며, 한 번 토큰을 발급한 후 사용자 정보가 바뀌더라도 새로운 토큰을 발급하지 않으면 서비스를 사용하지 못하게 되어있다. JWT를 사용하면 무상태(Stateless)인 환경에서 사용자 데이터를 주고 받을 수 있게된다. 세션(session)을 사용하게 될 경우에는 쿠..