Authentication 10

23.AccessDesicionManager, AccessDecisionVotor

AccessDecisionManager 인증정보 , 요청정보, 권한정보 를 이용해서 사용자의 자원접근 허가여부를 결정하는 주체 여러개의 Votor 를 가지며 Votor 들에게 허용, 거부 , 보류 값을 각각 리턴받아 판단, 결정한다. 접근 거부시 AccessDeniedException을 발생 AcceessDesicionManager 의 접근 결정 유형에 따른 구현객체들 AffermativeBased : Votor 클래스 중 하나라도 접근 허가를 내면 접근 허가 ConsensusBased : 다수표에 의해 판단, 동수일경우 default 값은 허가이며, allowIfEqualGrantedDeniendDecisions 속성을 false 로 주면 접근 거부 설정 됨 UnanimousBased : 하나의 Vot..

22.Authorization, FilterSecurityInterceptor

Authorization 무엇이 허가되었는지 증명하는 것이다. SpringSecurity 는 Authentication 과 Authorization 으로 영역을 나눈다. Authentication 영역에서는 사용자가 자원에 접근하기위해 Request 를 보낼 때 인증 여부를 확인한다. Authorization 영역에서는 인증이 완료 된 후 사용자가 특졍 자원에 접근할 때에 사용자의 권한이 특정 자원의 접근 권한에 충분하는 지의 심사를 한다. SpringSecurity 가 지원하는 권한 계층 웹 계층 : Presentation Tier 의 URL 요청 단위 레벨 보안 서비스 계층 : Service Tier 의 메서드 단위 레벨 보안 도메인 계층(Access Control List, 접근 제어 목록) : P..

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 권한을 저..

7.RememberMeAuthenticationFilter

RememberMeAuthenticationFilter 의 동작조건. RememberMeAuthenticationFilter는 특정조건을 수립해야만 동작하는 필터이다. SecurityContext의 Authentication 객체가 null일경우 = 이는 Session만료나 브라우저의 종료를 의미한다. 결국, Remember-Me 쿠키가 존재하든 하지않든 RememberMeAuthenticationFilter는 동작하게 된다. Login(인증) 시기에 사용자가 RememberMe 서비스를 체크하고 인증에 완료했을 경우 이경우에는 첫번째 조건을 포함한다. 이유는 Session이 만료되어 SecurityContext 의 Authentication 객체가 null 이 되는 것이 선행 조건이기 때문이다. 요청시..

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..