SecurityContext 8

19.Authentication Flow

Authentication Flow : 인증의 흐름 Client Login Request UsernamePasswordAuthenticationFilter 가 수렴하여 username , password 를 담은 Authentication 토큰생성 AuthenticationManager 에게 Authentication 객체를 넘겨 처리 위임 AuthenticationManager는 인증 관리자로 적절한 AuthenticationProvider에게 넘기는 역할 만을 함 AuthenticationProvider 는 Authentication 객체를 받아 실제 인증 처리를 시작 AuthenticationProvider는 UserDetailsService에게 username 을 주어 User객체 요청 : loa..

18.인증 저장소 필터 , SecurityContextPersistenceFilter

SecurityContextPersistenceFilter SecurityContext 객체의 생성, 저장, 조회 를 담당 FilterChainProxy의 Filter 중 2번 째에 위치 접근에 따른 동작 익명사용자의 접근 SecrutityContext 객체를 생성하여 SecurityContextHolder에 저장함 AnonymousAuthenticationFilter 에서 만든 AnonymousAuthenticationToken 객체를 SecurityContext에 저장시킴 인증 시도 시 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장 UsernamePasswordAuthenticationFilter 에서 인증 성공 후 만든 UsernamePasswordAut..

17.SecurityContextHolder, SecurityContext

SecurityContext Authentication 의 보관소, 언제든 Authentication을 꺼내 사용할 수 있도록 제공되는 클래스이다. ThreadLocal 에 저장되어 아무 곳에서 참조가 가능하도록 설계됨 ThreadLocal 은 Thread 하나에 할당 된 저장소이다. 즉 Thread-Safe 하다. ThreadLocal은 인증 완료시 HttpSession 저장되어 Application 전반에서 참조가 가능하다. SecurityContextHolder SecurityContext를 감싸 저장하는 객체, 저장방법은 3가지이다. MODE_THREADLOCAL : 하나의 스레드 당 SecurityContext 를 할당 , default 값 MODE_INHERITABLETHREADLOCAL : ..

16.Authentication

인증, Authentication 스스로 누구인지 증명하는 것이다. Authentication 객체는 사용자의 인증 정보를 담는 Token 개념이다. (UsernameAuthenticationToken , AnonymousAuthenticationToken , RememberMeAuthenticationToken...) 인증 시의 id , password를 담아 인증 검증을 위해 전달되어 사용된다. 인증 후 최종 Authentication 객체에는 사용자 정보를 담은 User 객체와 권한정보인 Authority가 들어있다. Authentication 객체는 SecurityContext에 저장되어 전역적으로 참조가 가능 Authentication authentication = SecurityContextH..

8.AnonymousAuthenticationFilter

AnonymousAuthenticationFilter..? 익명사용자와 인증사용자와의 구분을 위해 만들어진 필터이다. Authentication 객체를 Session에 저장하지 않는다. 화면에 메뉴여부를 판단할때 isAnonymous() , isAuthenticated() 등으로 줄 수 있다. 처리 과정. 자원 접근에 대한 Request AnonymousAuthticationFilter 에서 Session의 SecurityContextHolder 의 SecurityContext에 Authentication 객체가 있는지 확인 있다면 chain.doFilter() 없다면 AnonymousAuthenticationToken 객체를 만들어서 AnonymousUser 객체, ROLE_ANONYMOUS 권한을 저..

5.LogoutFilter

Spring Security 의 로그아웃 과정 유저가 request("로그아웃경로") 요청 SpringSecurity 가 세션을 무효화(SESSIONID 삭제, Invalidate) , 인증토큰삭제(UsernamePasswordAthenticationToken), 관련된 쿠키(remeber-me 등)를 제거. 지정한 경로로 Redirect 시킴. 로그아웃 처리를 위한 API들 http.logout() : 로그아웃 처리를 담당 Logout 처리를 위한 하위 API logoutUrl(url) : 로그아웃 처리 url을 지정, default = /logout logoutSuccessUrl(url) : 로그아웃 성공시 이동 경로, default = /login deleteCookies(cookieName...)..

4.UsernamePasswordAuthenticationFilter

UsernamePasswordAuthenticationFilter? 로그인 처리, 인증기능 해주는 Filter이다. 실질적으로 사용자가 로그인을 하게되면, 인증처리가 이루어지는데 이 요청을 담당하여 인증처리를 하는 Filter가 UsernamePasswordAuthenticationFilter 이다. 흐름과 역할은, 분기점, 결과처리! 내부적으로 각각의 인증처리 역할에 따라 여러개의 클래스를 활용하게된다. 사용자가 인증을 시도 UsernamePasswordAuthenticationFilter가 요청을 받는다. AntPathRequestMatcher("/login") 가 요청 url이 로그인 url과 매칭되는지 검사한다. 매칭이 되면 다음단계 , 불일치하면 다른 Filter가 Chain 일치하면 Usern..

3.Form Login 인증

Form 인증의 과정은? 클라이언트가 자원접근 시도 서버의 자원접근 보안정책에 맞지않으면 로그인페이지로 리다이렉트 POST 방식으로 로그인 인증시도 SpringSecurity가 세션 ID를 생성 , 인증결과를 담은 인증(Athenciation) 객체를 생성, SecurityContext 객체를 생성하여 인증객체를 담고 SecurityContext 객체를 Session에 담아보낸다. 이후 접근에는 SpringSecurity가 Session에서 인증토큰 존재여부를 확인하여 자원접근을 결정함 Form 인증 방식의 API들은 무엇인가요? Form Login 인증 API http.formLogin() : Form 로그인 인증기능 작동 formLogin()의 하위 API들 loginPage(url) : 사용자 정의..