Spring/Spring Security

    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 목록을 포함한다. 인증이 완료되거나 혹은 인증되지 사용자를 모두를 포괄적으로 표현하며, 인증 여부를 확인..

    Spring Security - SecurityContext, SecurityContextHolder, SecurityContextHolderStrategy, Authentcation

    먼저 인증이 진행되어 인증객체가 생성되는 간단한 지식을 정리하자. 스프링 시큐리티는 servlet filter를 기반으로 인증 기능을 지원한다. spring boot의 기본 설정을 사용한다면 springSecurityFilterChain filter를 자동으로 등록해 주고 이 filter를 이용하여 스프링 시큐리티의 인증 과정의 전체적인 동작을 주관한다. FilterChain 이름에서 보이다시피, 필터들은 다양하게 순서대로 엮여서 Chain을 구성하며, 이 필터들의 체인을 요청이 거쳐가면서 인증과정이 진행된다. 인증 과정이 끝나고 인증이 된다면, 이 요청의 사용자가 누구인지 알아야 하고 이 사용자가 올바른 인증된 사용자인지, 올바른 권한을 가지고 있는지 판단하기 위해서 인증 객체를 사용하게 된다. 그래서..

    FilterChainProxy

    FilterChainProxy https://docs.spring.io/spring-security/site/docs/3.1.4.RELEASE/reference/security-filter-chain.html Spring Security란 Spring Security는 일반적인 공격에 대한 인증, 권한 부여 및 보호를 제공하는 프레임워크입니다. 명령형 및 반응형 애플리케이션 모두를 보호하기 위한 최고 수준의 지원을 통해 Spring 기반 애플리케이션을 보호하기 위한 사실상의 표준입니다. -스프링 시큐리티 문서- 인증과 인가 일반적인 해킹 공격으로부터 보호(CSRF, 세션고정 등) Spring Security의 Servlet 지원은 FilterChainProxy에 포함되어 있습니다. FilterChainP..

    DelegatingFilterProxy - Spring Security

    DelegatingFilterProxy delegating의 사전적 의미 : 위임하다 DelegatingFilterProxy : 들어온 요청을 서블릿으로 전달하기 전에 Security filter에 위임을 해서 인증/인가 처리를 하고 Servlet으로 요청을 전달해주는 역할을 하는 서블릿 필터 javax.servlet.filter 인터페이스를 구현하고 있다. Spring Security를 사용한다면, DelegatingFilterProxy가 생성된다. Spring Boot 사용시 SecurityFilterAutoConfiguration을 통해서 DelegatingFilterProxyRegistrationBean 빈을 생성하며 DelegatingFilterProxyRegistrationBean 은 Dele..

    인증 예외(AuthenticationException)를 처리하는 AuthenticationEntryPoint

    Spring Security 인증 예외를 처리하는 AuthenticationEntryPoint AuthenticationEntryPoint 는 인증되지 않은 사용자에 대한 처리를 담당한다. (핸들러 라고 볼 수 있다) 이 때 처리는, 그냥 http 응답이라던가, 페이지 redirect 라 던가 등 개발자가 정의할 수 있다. AuthenticationException (인증 예외)예외가 발생했을떄 처리하는 인터페이스이다. 헷갈리지 말아야 하는게, AccessDeniedException( 인가 예외) 가 발생했을 때 처리하는 인터페이스가 아니다. /** * Used by {@link ExceptionTranslationFilter} to commence an authentication scheme. */ p..