Spring

    SessionManagementFilter, ConcurrentSessionFilter - 세션 관리 필터

    SessionManagementFilter - 세션 관리 필터 SpringSecurity에서 세션 관리에 관련된 기능을 제공해주는 필터이다 https://docs.spring.io/spring-security/site/docs/5.1.5.RELEASE/reference/htmlsingle/#session-mgmt 필터 순서가 뒷 부분에 존재한다. ConcurrentSessionFilter와 함께 동시세션 만료를 해준다 SessionManagementFilter는 다음과 같은 역할을 한다. 세션 관리 : 인증시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션이력을 관리 동시적 세션 제어 : 동일 계정 - 접속 허용 최대 세션수 제한 동시 세션을 확인하고, 필요시 세션을 만료처리해준다 세션 고정 보호(se..

    SecurityContextPersistenceFilter - SecurityContext 영속화 필터, SecurityContextRepository

    SecurityContextPersistenceFilter - SecurityContext 영속화 필터 SecurityContext라는 녀석을 영속화 하는 책임을 가진 필터 보통 필터 목록 중 2번째 또는 3번째 위치하며 거의 최상단에 위치하는 필터이다. SecurityContextRepository 인터페이스 구현체를 통해 사용자의 SecurityContext 객체를 생성, 저장, 조회한다 SecurityContext가 존재하지 않는다면, empty SecurityContext를 생성 SecurityContextRepository 인터페이스 기본 구현은 Session을 이용하는 HttpSessionSecurityContextRepository 클래스 별도의 변경이 없다면, HttpSessionSecur..

    RememberMeAuthenticationFilter, RememberMeSevices

    세션이 사라지거나 만료가 되더라도 쿠키 또는 DB를 사용하여 저장된 토큰 기반으로 Remember-Me 인증에 사용되는 필터이다. 먼저, RememberMeAuthenticationFilter에서 인증이 진행되는데 이 필터가 존재하려면 Remember-Me 기능이 활성화 되어야 한다. 이 필터는 필터들은 중 뒷부분에 존재한다 default로는 DefaultLoginPageGeneratingFilter나 UsernamePasswordAuthenticationFilter보다 뒤에 존재함 RememberMeAuthenticationFilter 필터가 실행될 조건은 다음과 같다. 스프링 시큐리티에서 사용하는 인증객체(Authentication)가 Security Context에 없어야 함 세션 만료(time o..

    Remember-ME 인증과정

    Remember-ME? 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는기능이다. 보통 로그인 창에는 체크박스로 로그인 기억(로그인 저장) 등을 지원하는데, 사용자는 일반적으로 로그인 후에 서버에서 Remember-me 관련 쿠키로(cookie) 보내주면 다음 요청시, 명시적으로 로그아웃 하지 않는이상 계속 로그인 되있는 것처럼 쿠키 기반으로 인증을 하는 방식이다. Remember-Me가 무엇인지 정리하자면 다음과 같다 일반적으로 로그인 한 후에 브라우저를 끄거나, 일정 시간이 지나 세션이 만료되는 경우 명시적으로 로그아웃 하지 않더라도 로그아웃이 된다. 이 때 재 로그인 하지 않더라도 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는기능이다. 인증되..

    BasicAuthenticationFilter

    이 필터는 인증 체계가 Basic이고 Base64로 인코딩된 사용자 이름:비밀번호 토큰이 있는 Authorization의 HTTP 요청 헤더가 있는 요청을 처리하는 역할을 한다. 요청당 1번 실행을 보장하는 것을 목표로 하는 필터 기본 추상 클래스인 OncePerRequestFilter을 구현하고 있다. form 인증이 아닐 때 인증을 시도하는 필터이다. Authentication header를 이용하여 Basic {token} 값을 전달하여 인증을 하는 방식이다. token 값은 username:password를 BASE64로 인코딩하여 전달되는 값을 Filter에서 decode하여 인증을 진행 stateless 방식이다. 클라이언트와 서버가 분리되어 있는 경우 (예, SPA페이지, 모바일 앱) 서버 ..

    AbstractAuthenticationProcessingFilter (a.k.a UsernamePasswordAuthenticationFilter) 와 인증과정

    UsernamePasswordAuthenticationFilter란 폼 기반 인증 (form based authentication)방식으로 인증을 진행할 때 아이디, 패스워드 데이터를 파싱하여 인증 요청을 위임하는 필터이다. POST /login 을 처리. processingUrl 을 변경하면 주소를 바꿀 수 있음. form 인증을 처리해주는 필터로 스프링 시큐리티에서 가장 일반적으로 쓰임. 유저가 로그인 창에서 Login을 시도할 때 보내지는 요청에서 아이디(username)와 패스워드(password) 데이터를 가져온 후 인증을 위한 토큰을 생성 후 인증을 다른 쪽에 위임하는 역할을 하는 필터이다. AuthenticationManager에게 인증을 위임한다. Spring Boot 기반의 HttpSec..

    DefaultLogoutPageGeneratingFilter, LogOutFilter

    사용자가 로그아웃 페이지를 구성하지 않은 경우 기본적으로 로그아웃 페이지를 만들어주는 필터이다. 일반적으로 DefaultLoginPageGeneratingFilter 바로 뒤에 존재한다. /login 으로 get 요청을 보낼 경우 기본적으로 제공해주는 로그인페이지로 보내주고 /logout 으로 get 요청을 보낼 경우 기본적으로 제공하는 로그아웃 페이지를 보내준다. 실제 로그아웃 처리는 LogoutFilter가 한다. 이 필터는 로그아웃 페이지를 만들어주는 필터이다 로그아웃 URL을 변경하고 싶다면? @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http.authorizeReq..

    DefaultLoginPageGeneratingFilter

    사용자가 로그인 페이지를 구성하지 않은 경우 기본적으로 로그인 페이지를 만들어주는 필터이다. 별도의 로그인 페이지 설정을 하지 않으면 제공되는 필터 로그인 페이지 자체를 커스텀 구현 가능하며, 이 경우 해당 필터는 비활성화됨 docs 프로세스는 단순하다 커스텀 로그인 페이지가 활성화 되어 있고 URL을 설정하였으면 설정된 URL로 가서 커스텀 로그인 페이지를 보여준다. 활성화가 되어있지 않으면 DefaultLoginPageGeneratingFilter를 등록하고 요청이 들어오면 해당 필터에서 Html을 생성해서 로그인 페이지를 보여준다. 우리가 만약 로그인 페이지를 커스텀 해서 사용할 것이면? 시큐리티 설정 내에서 로그인 페이지를 따로 설정 해줘야 한다 http.formLogin() .loginPage(..

    Spring Security에서 인증이 일어나는 과정 (인증과정, form login 과정)

    Spring Security 인증 과정 인증 과정 전에 인증과 인가에 대해 용어 정리를 간략하게 하려고 한다 인증(Authentication) 사용자의 신원을 확인하는 과정 아이디/패스워드 기반 로그인 OAuth2.0 프로토콜을 통한 Social 인증 인가(Authorization) 어떤 개체가 어떤 리소스에 접근할 수 있는지 또는 어떤 동작을 수행할 수 있는지를 검증하는 것, 즉 접근 권한을 얻는 일을 의미 적절한 권한이 부여된 사용자들만 특정 기능 수행 또는 데이터 접근을 허용함 사용자가 로그인 정보와 함께 인증 요청을 한다.(Http Request) AuthenticationFilter가 요청을 가로채고, 가로챈 정보를 통해 UsernamePasswordAuthenticationToken의 인증용 ..

    Authentication, AuthenticationManager, AuthenticationProvider, eraseCredentialsAfterAuthentication

    일반적인 Spring Security에서 인증 객체(Authentication 객체 )를 얻는 과정은 다음과 같다. AuthenticationManager 를 구현한 ProviderManager가, 내부적으로 List를 가지고 있다 이 ProviderManager가 List에서 실제로 인증을 처리하는 객체인 AuthenticationProvider을 찾아서 인증을 진행시켜 인증된 Authentication 객체를 반환한다. Authentication (인증) 사용자를 표현하는 인증 토큰 인터페이스이며, 인증주체를 표현하는 Principal 그리고 사용자의 권한을 의미하는 GrantedAuthority 목록을 포함한다. 인증이 완료되거나 혹은 인증되지 사용자를 모두를 포괄적으로 표현하며, 인증 여부를 확인..