인프런145 15) 예외처리 - exceptionHandling(), ExceptionTranslationFilter exceptionHandling() • 예외 처리는 필터 체인 내에서 발생하는 예외를 의미하며크게 인증예외(AuthenticationException) 와 인가예외(AccessDeniedException)로 나눌 수 있다 • 예외를 처리하는 필터로서 ExceptionTranslationFilter 가 사용 되며 사용자의 인증 및 인가 상태에 따라로그인 재시도, 401, 403 코드 등으로 응답할 수 있다 예외 처리 유형 AuthenticationException [ 인증 예외 ] 해당 예외가 발생하면 ExceptionTranslationFilter가 진행하는 과정 1. SecurityContext에서 인증 정보 삭제 기존의 Authentication 이 더 이상 유효하지 않다고 판단하고 Authe.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 24. 14) 세션관리 - SessionManagementFilter / ConcurrentSessionFilter SessionManagementFilter • 요청이 시작된 이후 사용자가 인증되었는지 감지하고, 인증된 경우에는 세션 고정 보호 메커니즘을 활성화하거나동시 다중 로그인을 확인하는 등 세션 관련 활동을 수행하기 위해 설정 된 세션 인증 전략(SessionAuthenticationStrategy)을 호출하는 필터 클래스이다 • 스프링 시큐리티 6 이상에서는 SessionManagementFilter 가 기본적으로 설정 되지 않으며세션관리 API 를 설정을 통해 생성할 수 있다 세션 구성 요소 ConcurrentSessionFilter [동시 세션 제어] • 각 요청에 대해 SessionRegistry에서 SessionInformation 을 검색하고 세션이 만료로 표시되었는지 확인하고 만료로 표.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 23. 13)세션관리 - 동시 세션 제어 , 세션 고정 보호, 세션 생성 정책 세션관리 - 동시 세션 제어 • 동시 세션 제어는 사용자가 동시에 여러 세션을 생성하는 것을 관리하는 전략이다 • 이 전략은 사용자의 인증 후에 활성화된 세션의 수가 설정된 maximumSessions 값과 비교하여 제어 여부를 결정한다 하나의 계정으로 인해 세션이 여러개 생기는것 == 동시적 세션[각 클라이언트가 동일한 계정으로 인증을 하게되면 각각 다른 세션이 서버에 생성되고각각 다른 세션ID가 클라이언트에게 반환된다.] pc,휴대폰,패드 각각 로그인을 하게된다면 3개의 클라이언트가 각각 세션을 가지게 된다. 최대 세션이 만약 1개라면-> pc에서 로그인하고 난뒤 휴대폰에서 로그인하면 pc에 인증한게 무효화되거나 휴대폰에서 로그인이 안된다. 동시 세션 제어 2 가지 유형 1. 사용자 세션 강.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 22. 12)스프링 MVC 로그인 구현 스프링 MVC 로그인 구현 • 스프링 시큐리티 필터에 의존하는 대신 수동으로 사용자를 인증하는 경우스프링 MVC 컨트롤러 엔드포인트를 사용할 수 있다 • 요청 간에 인증을 저장하고 싶다면 HttpSessionSecurityContextRepository 를 사용하여 인증 상태를 저장 할 수있다 @RestController@RequiredArgsConstructorpublic class LoginController { private final AuthenticationManager authenticationManager; private final HttpSessionSecurityContextRepository securityContextRepository = new HttpSession.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 21. 11) 인증 상태 영속성 - SecurityContextRepository & SecurityContextHolderFilter SecurityContextRepository • 스프링 시큐리티에서 사용자가 인증을 한 이후 요청에 대해 계속 사용자의 인증을 유지하기 위해 사용되는 클래스이다 • 인증 상태의 영속 메커니즘은 사용자가 인증을 하게 되면 해당 사용자의 인증 정보와 권한이 SecurityContext에 저장되고 HttpSession 을 통해 요청 간 영속이 이루어 지는 방식이다 구조 SecurityContextRepository 구현체 3가지 • HttpSessionSecurityContextRepository 요청 간에 HttpSession 에 보안 컨텍스트를 저장한다. 후속 요청 시 컨텍스트 영속성을 유지한다 • RequestAttributeSecurityContextRepository ServletRequest.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 18. 10) 사용자 상세 서비스 - UserDetailsService , 사용자 상세 -UserDetails UserDetailsService UserDetailsService의 주요 기능은 사용자와 관련된 상세 데이터를 로드하는 것이며사용자의 신원, 권한, 자격 증명 등과 같은 정보를 포함할 수 있다 이 인터페이를 사용하는 클래스는 주로 AuthenticationProvider 이며사용자가 시스템에 존재하는지 여부와 사용자 데이터를 검색하고 인증 과정을 수행한다 사용자의 이름을 통해 사용자 데이터를 검색하고, 해당 데이터를 UserDetails 객체로 반환한다 UserDetailsService 흐름도 UserDetailsService 사용 방법 위의 userDetailService() 메소드를 사용한것처럼 직접 POJO객체를 등록해도 되지만 아래처럼 @Bean을 이용해서 빈등록을 하는것이 사용.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 17. 9) 인증 제공자 - AuthenticationProvider AuthenticationProvider • 사용자의 자격 증명을 확인하고 인증 과정을 관리하는 클래스로서 사용자가 시스템에 액세스하기 위해제공한 정보(예: 아이디와 비밀번호)가 유효한지 검증하는 과정을 포함한다 • 다양한 유형의 인증 메커니즘을 지원할 수 있는데,예를 들어 표준 사용자 이름과 비밀번호를 기반으로 한 인증, 토큰 기반 인증, 지문 인식 등을 처리할 수 있다. • 성공적인 인증 후에는 Authentication 객체를 반환하며 이 객체에는 사용자의 신원 정보와 인증된 자격 증명을 포함한다 • 인증 과정 중에 문제가 발생한 경우 AuthenticationException 과 같은 예외를 발생시켜 문제를 알리는 역할을 한다 AuthenticationProvider 흐름도 Authent.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 16. 8) 인증 관리자 - AuthenticationManager AuthenticationManager • 인증 필터로부터 Authentication 객체를 전달 받아 인증을 시도하며 인증에 성공할 경우사용자 정보, 권한 등을 포함한 완전히 채워진 Authentication 객체를 반환한다 • AuthenticationManager 는 여러 AuthenticationProvider 들을 관리하며 AuthenticationProvider 목록을 순차적으로 순회하며 인증 요청을 처리한다 • AuthenticationProvider 목록 중에서 인증 처리 요건에 맞는 적절한 AuthenticationProvider 를 찾아 인증처리를 위임한다 • AuthenticationManagerBuilder 에 의해 객체가 생성되며 주로 사용하는 구현체로 ProviderManager.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 15. 7) 인증 아키텍처 - Authentication , SecurityContext / SecurityContextHolder 인증 - Authentication • 인증은 특정 자원에 접근하려는 사람의 신원을 확인하는 방법을 의미한다 • 사용자 인증의 일반적인 방법은 사용자 이름과 비밀번호를 입력하게 하는 것으로서인증이 수행되면 신원을 알고 권한 부여를 할 수 있다 • Authentication 은 사용자의 인증 정보를 저장하는 토큰 개념의 객체로 활용되며인증 이후 SecurityContext 에 저장되어 전역적으로 참조가 가능하다 • getPrincipal() 인증 주체를 의미하며 인증 요청의 경우 사용자 이름을, 인증 후 에는 UserDetails 타입의 객체가 될 수 있다• getCredentials() - 인증 주체가 올바른 것을 증명하는 자격 증명으로서 대개 비밀번호를 의미한다• getAuthorities().. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 14. 6) 인증 프로세스 - logout() ,RequestCache / SavedRequest 로그아웃• 스프링 시큐리티는 기본적으로 DefaultLogoutPageGeneratingFilter를 통해로그아웃 페이지를 제공하며 “ GET / logout ” URL 로 접근이 가능하다. • 로그아웃 실행은 기본적으로 “ POST / logout “ 으로만 가능하나CSRF 기능을 비활성화 할 경우 혹은 RequestMatcher 를 사용할 경우 GET, PUT, DELETE 모두 가능하다 • 로그아웃 필터를 거치지 않고 스프링 MVC 에서 커스텀 하게 구현할 수 있으며로그인 페이지가 커스텀하게 생성될 경우 로그아웃 기능도 커스텀하게 구현해야 한다 logout() API @EnableWebSecurity@Configurationpublic class SecurityConfig { @Bean .. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 11. 5) 인증프로세스 - BasicAuthenticationFilter , rememberMe() , RememberMeAuthenticationFilter, anonymous() BasicAuthenticationFilter • 이 필터는 기본 인증 서비스를 제공하는 데 사용된다 • BasicAuthenticationConverter 를 사용해서 요청 헤더에 기술된 인증정보의 유효성을 체크하며Base64 인코딩된 username 과 password 를 추출한다[유효성 체크 ==> Authentication이라는 헤더가 있는지, Basic이라는 인증기술이 적혀있는지 확인하는 절차 ] • 인증 이후 세션을 사용하는 경우와 사용하지 않는 경우에 따라 처리되는 흐름에 차이가 있다.세션을 사용하는 경우 매 요청 마다 인증과정을 거치지 않으나세션을 사용하지 않는 경우 매 요청마다 인증과정을 거쳐야 한다[ex) jwt같은] BasicAuthenticationFilter를 통해 유효성 체크를 .. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 10. 4) 인증프로세스 - 폼 인증,폼 인증 필터, HTTP Basic 인증 폼 인증 • HTTP 기반의 폼 로그인 인증 메커니즘을 활성화하는 API 로서사용자 인증을 위한 사용자 정의 로그인 페이지를 쉽게 구현할 수 있다 • 기본적으로 스프링 시큐리티가 제공하는 기본 로그인 페이지를 사용하며사용자 이름과 비밀번호 필드가 포함된 간단한 로그인 양식을 제공한다 • 사용자는 웹 폼을 통해 자격 증명(사용자 이름과 비밀번호)을 제공하고Spring Security는 HttpServletRequest에서 이 값을 읽어 온다 클라이언트가 아직 접근 인증을 받지 못했다면 접근 예외가 발생하고 예외 처리 필터로 인해 인증이 시작되면서 로그인 페이지로 리다이렉트 된다. formLogin() API[메소드를 API라고 칭하는 이유는 이 메서드들이 Spring Security의 내부 기능에 접.. 인프런/스프링 시큐리티 완전 정복 [6.x 개정판] 2024. 10. 8. 이전 1 2 3 4 5 ··· 13 다음