분류 전체보기 1341

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 인가 결정 심의자(AccessDecisionManager, AccessDecisionVoter)

AccessDecisionManager 인증 정보, 요청정보, 권한 정보를 이용해서 사용자의 자원 접근을 허용할 것인지 거부할 것인지를 최종 결정하는 주체 여러 개의 Voter 들을 가질 수있으며 Voter 들로부터 접근 허용,거부, 보류에 해당하는 각각의 값을 리턴받고 판단 및 결정 최종 접근 거부 시 예외 발생 접근 결정의 AffirmativeBased 여러개의 Voter 클래스 중 하나라도 접근 허가로 결론을 내면 접근 허가로 판단한다 ConsensusBased 다수표(승인 및 거부)에 의해 최종 결정을 판단한다 동수일경우 기본은 접근 허가이나allowIfEqualGrantedDeniedDecisions을설정할 경우 접근거부로 결정된다 UnanimousBased 모든 보터가 만장일치로 접근을 승인해..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 인가 개념 및 필터 이해 (Authorization, FilterSecurityInterceptor)

Authorization 당신에게 무엇이 허가 되었는지 증명하는 것 스프링 시큐리티가 지원하는 권한 계층 웹 계층 URL 요청에 따른 메뉴 혹은 화면 단위의 레벨 보안 서비스 계층 화면 단위가 아닌 메소드 같은 기능 단위의 레벨 보안 도메인 계층(Access Control List, 접근제어 목록) 객체 단위의 레벨 보안 FilterSecurityInterceptor 마지막에 위치한 필터로써 인증된 사용자에 대하여 특정 요청의 승인/거부 여부를 최종적으로 결정 인증 객체 없이 보호자원에 접근을 시도할 경우 AuthenticationException을 발생 인증 후 자원에 접근 가능한 권한이 존재하지 않을 경우 AccessDeniedException을 발생 권한 제어 방식 중 HTTP 자원의 보안을 처리하..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 인증 처리자(AuthenticationProvider)

실질적으로 검증을 하는 클래스 authenticate, support 메서드 제공 authenticate : 실제 인증 위임받은 authenticaation 객체로 ID검증, Password검증, 추가 검증을 진행한다. ID검증 : userDetailService를 통해 ID검증을 하여 있다면 UserDetails 타입을, 없다면 UserNotFoundException을 반환한다. password검증 : ID검증에서 반환 받은 UserDetails와 위임받은 authentication 객체의 password를 비교하여 일치하는지 검증한다.(일치하지 않을 경우, BadCredentialException) 추가 검증 : 추가적으로 검증 모든 검증이 끝나게 되면 Authentication 인증 객체를 생성하여..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 인증 관리자(AuthenticationManager)

AuthenticationProvider 목록 중에서 인증 처리 요건에 맞는 AuthenticationProvider를 찾아 인증처리를 위임한다 실제 인증은 하지 않는다(위임만 한다) 부모 ProviderManager를 설정하여 AuthenticationProvider를 계속 탐색할 수 있다 ProviderManager가 인증에 맞는 Provider를 찾아 인증처리를 위임한다. 만약 찾을 수 있는 Provider가 없을 경우 parent속성의 ProviderManager를 탐색하여, Provider를 찾는다. Linked 형태로 부모와 자식 간의 관계를 형성할 수 있다 자식에서 적절한 AuthenticationProvider를 찾지 못할 경우 계속 부모로 탐색하여 찾는 과정을 반복한다 Authentica..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 인증 흐름 이해(Authentication Flow)

UsernamePasswordAuthenticationFilter form 인증방식을 인증을 하게 되면 동작하는 필터 Authentication객체에 ID,Password를 담고 AuthenticationManager에 위임한다. 인증이 완료된 Authentication 객체를 받게 되면 SecurityContext에 인증 객체를 저장한다. AuthenticationManager 전달받은 인증객체를 가지고, 인증의 전반적인 관리를 한다. AuthenticationProvider에 실제 인증검증을 위임한다(실제 인증은 AuthenticationProvider가 하는 것이다) 인증이 성공하면 Authentication(UserDetails + authorities) 객체를 만들어 UsernamePasswor..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 인증 저장소 필터(SecurityContextPersistenceFilter)

SecurityContext 객체의 생성, 저장, 조회 익명 사용자(인증하지 않고 자원 접근) 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장 AnonymousAuthenticationFilter에서AnonymousAuthenticationToken 객체를 SecurityContext에 저장 인증 시 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장 UsernamePasswordAuthenticationFilter에서인증 성공 후 SecurityContext에UsernamePasswordAuthenticationToken 객체를 SecurityContext에 저장 인증이 최종 완료되면 Session에Secu..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 인증 저장소(SecurityContextHolder, SecurityContext)

SecurityContext Authentication 객체가 저장되는 보관소로 필요시 언제든지 Authentication 객체를 꺼내어 쓸 수 있도록 제공되는 클래스 SecurityContext > Authentication > User 관계로 저장되어 있다. ThreadLocal에 저장되어 아무 곳에서나 참조가 가능하도록 설계함 ThreadLocal : 스레드마다 존재하는 고유 저장소 인증이 완료되면 HttpSession 에 저장되어 애플리케이션 전반에 걸쳐 전역적인 참조가 가능 SecurityContextHolder SecurityContext 객체 저장 방식 MODE_THREADLOCAL : 쓰레드당 SecurityContext 객체를 할당, 기본 값 MODE_INHERITABLETHREADLOC..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 인증 개념 이해(Authentication)

당신이 누구인지 증명하는 것 사용자의 인증 정보를 저장하는 토큰 개념 인증 시 id와 담고 인증 검증을 위해 전달되어사용된다 인증 후 최종 인증 결과 (user 객체, 권한 정보)를 담고 SecurityContext에 저장되어 전역적으로 참조가 가능하다 Authentication authentication = SecurityContexHolder.getContext(). getAuthentication() 구조 principal : 사용자 아이디 혹은 User 객체를 저장 credentials : 사용자 비밀번호 authorities : 인증된 사용자의 권한 목록 details : 인증 부가 정보 Authenticated : 인증 여부 AuthenticationManager가 인증처리를 한다. 인증이 완..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 필터 초기화와 다중 보안 설정

설정 클래스 별로 보안 기능이 각각 작동 설정클래스 별로 RequestMatcher 설정 http.antMatcher(“/admin/**) 설정클래스 별로 필터가 생성 스프링 시큐리티가 초기화할 때, SecurityFilterChain을 FilterChainProxy에 저장한다. FilterChainProxy 가 각 필터들 가지고 있음 SecurityFilterChins에서 List형식으로 가지고 있다 요청에 따라 RequestMatcher와 매칭되는 필터가 작동하도록 함 RequestMacher에 따라 매칭 되는 SecurityFilterChain의 Filter를 실행하여 인증, 인가 처리를 한다. RequestMacher에 따라 다중 설정 클래스를 설정할 수 있다는 의미이다. @Order(0) @Co..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 위임 필터 및 필터 빈 초기화(DelegatingProxyChain, FilterChainProxy)

서블릿 필터는 스프링에서 정의된 빈을 주입해서 사용할 수 없음 스프링 시큐리티는 모든 요청에 대하여 Filter기반으로 처리한다. DelegationFilterProxy를 사용하여 Spring Bean에 요청을 위임한다. 특정한 이름을 가진 스프링 빈을 찾아 그 빈에게 요청을 위임 springSecurityFilterChain 이름으로 생성된 빈을 ApplicationContext에서찾아 요청을 위임 실제 보안 처리를하지 않음 springSecurityFilterChain의 이름으로 생성되는 필터 빈 DelegatingFilterProxy으로부터 요청을 위임받고 실제 보안 처리 스프링 시큐리티 초기화 시 생성되는 필터들을 관리하고 제어 스프링 시큐리티가 기본적으로 생성하는 필터 설정 클래스에서 API 추..