본문 바로가기

Language/Spring Security

(59)
예외 필터 - ExceptionTranslationFilter() 예외 처리 흐름도인증 받지 못한 사용자가 /user URL 요청→ /user URL은 인증이 필요가장 마지막의 인가 필터(AuthorizationFilter)가 받음AuthorizationManager를 통해 사용자의 접근 여부를 판단하고 최종 반환 받은 값으로 해당 유저는 접근할 수 없다고 판단 → 인가 예외(AccessDeniedException) 발생ExceptionTranslationFilter가 받음 → 해당 필터는 인증 예외, 인가 예외 두 가지를 처리할 수 있지만 지금 받은 것은 인가 예외AccessDeniedException에서 익명 사용자 또는 RememberMe(기억하기 인증) 사용자라면 인증 예외(AuthenticationException)으로 전달 → 아이디, 패스워드를 입력한 사용..
예외 처리 - ExceptionHandling() 예외 처리는 필터 체인 내에서 발생하는 예외를 의미크게 인증예외(AuthenticationException)와 인가예외(AccessDeniedException)로 나뉨예외를 처리하는 필터로서 ExceptionTranslationFilter가 사용 되며 사용자의 인증 및 인가 상태에 따라 [로그인 재시도 / 401 / 403] 코드 등으로 응답 가능예외 처리 유형AuthenticationException(인증 예외)SecurityContext 에서 인증 정보 삭제기존의 Authentication이 더 이상 유효하지 않다고 판단하고 Authentication을 초기화AuthenticationEntryPoint 호출AuthenticationException이 감지되면 필터는 authenticationEntry..
SessionManagementFilter / ConcurrentSessionFilter SessionManagementFilter요청이 시작된 이후 사용자가 인증되었는지 감지하고, 인증된 경우에는 세션 고정 보호 메커니즘을 활성화하거나 동시 다중 로그인을 확인하는 등 세션 관련 활동을 수행하기 위해 설정된 세션 인증 전략(SessionAuthenticationStrategy)을 호출하는 필터 클래스스프링 시큐리티 6 이상에서는 SessionManagementFilter가 기본적으로 설정 되지 않으며 세션관리 API 를 설정을 통해 생성 가능→ SessionManagement API를 추가해야 SessionManagementFilter가 추가ChangeSessionIdAuthenticationStrategy : 세션 고정 보호 → 세션 고정 공격 방지ConcurrentSessionContro..
세션 생성 정책 - sessionManagement().sessionCreationPolicy() 개요스프링 시큐리티에서는 인증된 사용자에 대한 세션 생성 정책을 설정하여 어떻게 세션을 관리할지 결정 가능 → 이 정책은 SessionCreationPolicy로 설정 세션 생성 정책 전략SessionCreationPolicy.ALWAYS인증 여부에 상관없이(익명 사용자) 항상 세션을 생성ForceEagerSessionCreationFilter 클래스를 추가 구성 → 세션을 강제로 생성SessionCreationPolicy.NEVER스프링 시큐리티가 세션을 생성하지 않지만 애플리케이션이 이미 생성한 세션은 사용 가능 → 이미 생성한 세션 = WAS(Tomcat)SessionCreationPolicy.IF_REQUIRED (기본값)필요한 경우에만 세션을 생성예를 들어 인증이 필요한 자원에 접근할 때 세션을..
세션 고정 보호 - sessionManagement().sessionFixation() 세션 고정 보호 전략세션 고정 공격은 악의적인 공격자가 사이트에 접근하여 세션을 생성한 다음 다른 사용자가 같은 세션으로 로그인하도록 유도하는 위험을 의미스프링 시큐리티는 사용자가 로그인할 때 새로운 세션을 생성하거나 세션 ID를 변경함으로써 이러한 공격에 자동으로 대응 세션 고정 공격 사용자가 공격자의 쿠키를 받은 채로 로그인을 하게 되면 공격자가 사용자의 모든 권한과 정보를 다 볼 수 있게 됨sessionManagement() API ­ 세션 고정 보호@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.sessionManagement(session -> session ..
동시 세션 제어 - sessionManagement().maximumSessions() 개요동시 세션 제어는 사용자가 동시에 여러 세션을 생성하는 것을 관리하는 전략하나의 계정을 가지고 3명의 사용자가 서버에 인증을 받게 되면 3개의 세션이 생김 → 동시적 세션이 전략은 사용자의 인증 후에 활성화된 세션의 수가 설정된 maximumSessions 값과 비교하여 제어 여부를 결정  동시 세션 제어 2가지 유형사용자 세션 강제 만료새로운 클라이언트가 접속 시 최대 허용 개수를 초과되었다면 가장 오래된 클라이언트의 세션을 강제로 만료사용자 인증 시도 차단최대 허용 개수 초과 시 인증 예외가 발생하여 로그인 자체를 실패사용자 세션 강제 만료 ⇒ 세션 개수 초과 시 가장 오래된 사용자의 세션을 만료사용자 인증 시도 차단 ⇒ 세션 개수 초과 시 로그인 불가(인증 시도 차단) sessionManagem..
SecurityContextRepository / SecurityContextHolderFilter SecurityContextRepository 스프링 시큐리티에서 사용자가 인증 이후 요청에 대해 계속 사용자의 인증을 유지하기 위해 사용되는 클래스Repository ⇒ 인증 상태를 유지하기 위한 저장소인증 상태의 영속 메커니즘사용자가 인증 성공 시 해당 사용자의 인증 정보와 권한(인증 객체)이 SecurityContext에 저장HttpSession을 통해 요청 간 영속이 이루어 지는 방식 인증 요청 사용자 로그인 요청(아이디, 패스워드 입력)AuthenticationFilter가 해당 정보를 AuthenticationManager에게 전달하여 인증 객체를 AuthenticationFilter에 반환Authentication 객체를 SecurityContext에 저장SecurityContext를 명시적..
사용자 상세 - UserDetails 시큐리티 인증 / 인가 흐름도  UserDetails사용자의 기본 정보를 저장하는 인터페이스로서 Spring Security에서 사용 하는 사용자 타입개발자마다 여러 도메인 객체를 생성(User, UserDao, UserDto 등)하면 스프링 시큐리티가 인식 할 수 없음하지만, UserDetails에 담게 되면 스프링 시큐리티는 UserDetails만 바라보기 때문에 어떤 타입이든 문제가 없음저장된 사용자 정보는 추후에 인증 절차에서 사용되기 위해 Authentication 객체에 포함되며 구현체로서 User클래스가 제공UserDetails 메서드메서드설명isCredentialIsNonExpired()|X" style="height: 20px; width: 66.2351%;">비밀번호가 유효 기간이 지났..