전체 글(131)
-
Spring Security - 인증 플로우, AuthenticationManager, AuthenticationProvider
인증 플로우 AuthenticationManager 실제 인증역할은 하지 않는다. 필터에서 인증 객체를 받아 Form 인증, RememberMe 인증, OAuth 인증 등, 인증 요청에 따라 그에 맞는 AuthenticationProvider를 찾아 실제 인증 역할을 위임한다. AuthenticationProvider ID검증, Password검증, 추가검증을 하고 인증에 성공하면 UserDetails 객체를 AuthenticationManager에 리턴한다. ID검증: UserDetailsService에서 ID를 가진 사용자가 있는지 검증한다. 없으면 UserNotFoundException을 생성한다. Password검증: 서버에 저장된 암호화된 비밀번호를 복호화하고 클라이언트에서 요청온 비밀번호와 비..
2021.04.17 -
Spring Security - SecurityContextPersistenceFilter
SecurityContextPersistenceFilter 역할 인증전 새로운 SecurityContext를 생성한다. 익명 사용자일 경우, AnonymousAuthenticationFilter에서 AnonymousAuthenticationToken(Authentication)객체를 SecurityContext에 저장한다. 인증시, UsernamePasswordAuthenticationFilter에서 UsernamePasswordAuthentication(Authentication)객체를 SecurityContext에 저장한다. 최종적으로 세션에 SecurityContext를 저장하고, SecurityContextHolder에서 해당 SecurityContext를 삭제한다. SecurityContextH..
2021.04.17 -
Spring Security - SecurityContext, SecurityContextHolder
SecurityContext Authentication 객체를 저장한다. TheadLocal에 저장되어 아무 곳에서나 참조 가능하다(Thread Safe) 예) Authentication authentication = SecurityContextHolder.getContext().getAuthentication() 인증이 완료된 후에는 HttpSession에 저장된다. SecurityContextHolder SecurityContext를 관리한다. SecurityContext 저장 방식을 3가지로 나눠 관리한다. MODE_THREADLOCAL : 스레드당 SecurityContext 객체를 할당, 기본값 MODE_INHERITABLETHREADLOCAL : 메인 스레드와 자식 스레드에 관하여 동일한 Se..
2021.04.17 -
Spring Security - Authentication 구조
Authentication 인증 정보를 저장하는 토큰 개념 구조 principal : 사용자 아이디 혹은 User 객체를 저장 credentials : 사용자 비밀번호 authorities : 인증된 사용자의 권한 목록 details : 인증 부가 정보 Authenticated : 인증 여부 Authentication은 인증 요청이 오면 아이디, 비밀번호와 같은 정보를 저장하여 생성된 뒤, 인증이 완료되면 사용자 정보, 권한 정보 등이 저장되어 SecurityContext에 등록되서 전역으로 사용할 수 있게된다.
2021.04.16 -
Spring Security - 다중 설정 클래스
설정 클래스가 두 개 이상이면 어떻게 동작할까? Spring Security는 설정 클래스가 여러개이면 각 설정 클래스마다 필터들을 만들고 FilterChainProxy가 관리하는 SecurityFilterChains에 등록하게 된다. 이렇게 등록할 때, 각 클래스에 @Order(0) 어노테이션을 설정해줘서 등록 순서를 분명하게 해줘야한다. 등록 순서대로 보안처리가 적용이 되기 때문에, 큰 범위의 URL은 구체적인 범위의 설정 클래스보다 순서가 뒤에 있어야한다. 클라이언트로부터 요청이 오면 FilterChainProxy는 요청정보에 매칭되는 설정 클래스의 필터를 찾아 필터들을 실행하게 된다.
2021.04.16 -
Spring Security - Security 아키텍처, DelegatingFilterProxy, FilterChainProxy
서블릿 Filter 서블릿이 호출되기 전, 후로 공통 로직을 수행하는 역할을 한다. 하지만 서블릿 영역이기 때문에 스프링빈을 사용할 수 없다. Spring Security는 MVC영역(Dispatcher Servlet)의 앞에서 보안 처리를 해야하기 때문에, Filter에서 스프링빈을 사용하여 보안 처리를 해야했다. DelegatingFilterProxy 서블릿 컨테이너에서 스프링 컨테이너로 보안처리를 위임하는 역할을 한다. 서블릿 영역의 Filter에서 스프링빈을 사용할 수 없기 때문에 서블릿 영억의 Filter로 등록된 DelegatingFilterProxy가 스프링 영역의 springSecurityFilterChain 이름의 스프링빈을 찾아 보안처리를 위임한다. 이 스프링빈이 FilterChainP..
2021.04.16