본문 바로가기

Language/Spring Security

(59)
기억하기 인증 필터 - RememberMeAuthenticationFilter SecurityContextHolder에 Authentication이 포함되지 않은 경우 실행되는 필터인증 정보가 SecurityContextHolder에 존재한다는 것은 인증이 유지되고 있다는 의미로, 인증 정보가 없을 때 RememberMeAuthenticationFilter를 실행세션이 만료되었거나 어플리케이션 종료로 인해 인증 상태가 소멸된 경우 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 자동 로그인 처리를 수행이전 글에서 토큰이 있는 채로 JSESSIONID를 삭제하고 다시 접속하였을 때 로그인 페이지로 튕겨지지 않은 것 기억하기 인증 필터 흐름도 Client가 GET 방식으로 “/user” URL 요청 RememberMeAuthenticationFilter 실행 Authenti..
기억하기 인증 - rememberMe() RememberMe 인증 사용자가 웹 사이트나 애플리케이션에 로그인할 때 자동으로 인증 정보를 기억하는 기능 UsernamePasswordAuthenticationFilter와 함께 사용 AbstractAuthenticationProcessingFilter 슈퍼 클래스에서 훅을 통해 구현인증 성공 시 RememberMeServices.loginSuccess()를 통해 RememberMe 토큰을 생성하고 쿠키로 전달인증 실패 시 RememberMeServices.loginFail()을 통해 쿠키를 지움LogoutFilter와 연계해서 로그아웃 시 쿠키를 지움  토큰 생성 기본적으로 암호화된 토큰으로 생성되며 브라우저에 쿠키를 보내고, 향후 세션에서 이 쿠키를 감지하여 자동 로그인이 이루어지는 방식으로 달..
기본 인증 필터 - BasicAuthenticationFilter 폼 인증 필터에서 처리하는 과정과 흡사하고 간단기본 인증 서비스를 제공하는데 사용BasicAuthenticationConverter를 사용하여 요청 헤더에 기술된 인증 정보의 유효성을 체크하며, Base64 인코딩된 username과 password를 추출 유효성 체크 클라이언트가 보낸 Request 헤더에 Authorization이 없으면 인증 처리 X Authorization 헤더명은 있으나 Basic이 없으면 인증 처리 X 인증 이후 세션을 사용하는 경우와 사용하지 않는 경우에 따라 처리되는 흐름에 차이가 있음기본적으로 BasicAuthenticationFilter는 세션을 사용하지 않음 세션을 사용하는 경우 매 요청마다 인증 과정을 거치지 않으나, 세션을 사용하지 않는 경우 매 요청마다 인증 과정..
기본 인증 - httpBasic() HTTP는 액세스 제어와 인증을 위한 프레임워크를 제공하며 가장 일반적인 방식은 “Basic” 인증 방식RFC 7235표준이며 인증 프로토콜은 HTTP 인증 헤더에 기술클라이언트는 인증 정보 없이 서버로 접속 시도 서버가 클라이언트에게 인증 요구를 보낼 때 401 Unauthorized 응답과 함께 WWW-Authenticate 헤더를 기술하여 realm(보안영역)과 Basic 인증 방법을 보냄 클라이언트가 서버로 접속할 때 Base64로 username과 password를 인코딩하고 Authorization 헤더에 담아서 요청성공적으로 완료되면 정상적인 상태 코드를 반환주의 사항base-64 인코딩된 값은 디코딩이 가능하여 인증 정보가 노출 HTTP Basic 인증은 반드시 HTTPS와 같이 TLS 기..
폼 인증 필터 - UsernamePasswordAuthenticationFilter 스프링 시큐리티는 AbstractAuthenticationProcessingFilter 클래스를 사용자 자격 증명을 인증하는 기본 필터로 사용 UsernamePasswordAuthenticationFilter는 AbstractAuthenticationProcessingFilter를 확장(상속)한 클래스로서 HttpServletRequest에서 제출된 사용자 이름과 비밀번호로부터 인증 수행인증 프로세스가 초기화될 때 로그인 페이지와 로그아웃 페이지 생성을 위한 DefaultLoginPageGeneratingFilter 및 DefaultLogoutPageGeneratingFilter가 초기화인증 흐름 client가 Get으로 URL /login 요청 UsernamePasswordAuthenticationFi..
폼 인증 - formLogin() 폼 인증 HTTP 기반의 폼 로그인 인증 메커니즘을 활성화하는 API사용자 인증을 위한 사용자 정의 로그인 페이지 쉽게 구현 가능기본적으로 스프링 시큐리티가 제공하는 기본 로그인 페이지 사용사용자 이름과 비밀번호 필드가 포함된 간단한 로그인 양식 제공사용자는 웹 폼을 통해 자격 증명(ID,PW)을 제공하고 Spring Security는 HttpServletRequest에서 이 값을 읽어옴폼 인증 흐름 client가 URL 요청 (/user)권한 검사 필터(AuthorizationFilter)가 사용자가 /user 경로에 접근이 가능한 지 검사해당 클라이언트가 인증을 받지 못했을 경우 접근 예외(AccessDeniedException) 발생예외 처리 필터(ExceptionTranslationFilter)가..
사용자 정의 보안 설정하기 사용자 정의 보안 기능 구현 한 개 이상의 SecurityFilterChain 타입의 빈을 정의한 후 인증 API 및 인가 API 설정인증 APIhttp.formLogin()http.logout()http.csrf()http.httpBasic()...인가 APIhttp.authorizeHttpRequests(auth -> auth.requestMatchers(/admin).hasRole(USER).permitAll().authenticated()... 기본 구현 코드 @EnableWebSecurity@Configurationpublic class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity..
DelegatingFilterProxy / FilterChainProxy Filter (서블릿 필터) 웹 애플리케이션에서 클라이언트의 요청(ServletRequest)과 서버의 응답(ServletResponse)을 가공하거나 검사하는 데 사용클라이언트의 요청이 서블릿에 도달하기 전이나 서블릿이 응답을 클라이언트에게 보내기 전 특정 작업을 수행필터는 서블릿 컨테이너(WAS)에서 생성되고 실행되고 종료필터의 doFilter() 메서드에서 chain.doFilter()의 이전, 이후 코드이전 코드 ⇒ 요청 처리 전 수행할 작업 (ServletRequest 수정)이후 코드 ⇒ 응답 처리 후 수행할 작업 (ServletResponse 수정) DelegatingFilterProxy 스프링에서 사용되는 특별한 서블릿 필터서블릿 컨테이너와 스프링 애플리케이션 컨텍스트 간의 연결 고리 역할서..