강의노트/스프링 시큐리티
-
[스프링 시큐리티] 자원 접근 허용 여부 결정 주체 (AccessDecisionManager, AccessDecisionVoter)강의노트/스프링 시큐리티 2020. 10. 7. 11:58
AccessDecisionManager 인증 정보, 요청 정보, 권한 정보를 이용해서 사용자의 자원접근을 허용할 것인지 거부할 것인지를 최종 결정하는 주체 여러 개의 Voter들을 가질 수 있으며 Voter들로부터 접근 허용, 거부, 보류에 해당하는 각각의 값을 리턴받고 판단 및 결정 최종 접근 거부 시 예외 발생 접근 결정의 세 가지 유형 AffirmativeBased 여러 개의 Voter 클래스 중 하나라도 접근 허가로 결론을 내면 접근 허가로 판단한다. ConsensusBased 다수표(승인 및 거부)에 의해 최정 결정을 판단한다. 동수일 경우 기본은 접근허가하나 allowIfEqualGrantedDeniedDecisions를 false로 설정할 경우 접근 거부로 결정된다. UnanimousBase..
-
[스프링 시큐리티] 자원 접근 허용 여부 검증(Authorization, FilterSecurityInterceptor)강의노트/스프링 시큐리티 2020. 9. 23. 22:04
Authorization 인증을 받은 클라이언트가 어떤 자원에 접근하려 할 때 그 자원에 접근할 수 있는 권한을 가지고 있는지 검증하는 것이다. 스프링 시큐리티가 지원하는 권한 계층 웹 계층 URL 요청에 따른 메뉴 혹은 화면 단위의 레벨 보안 서비스 계층 화면 단위가 아닌 메소드 같은 기능 단위의 레벨 보안 도메인 계층 (Access Control List, 접근 제어 목록) 객체 단위의 레벨 보안 FilterSecurityInterceptor 스프링 Security가 가지고 있는 필터들 중에서 가장 마지막에 위치한 필터로써 인증된 사용자에 대하여 특정 요청의 승인/거부를 최종적으로 결정한다. 인증 객체 없이 보호자원에 접근을 시도할 경우 AuthenticationException을 발생 시킨다. 인증..
-
[스프링 시큐리티] 인증 여부 결정 주체(AuthenticationProvider)강의노트/스프링 시큐리티 2020. 9. 23. 21:57
AuthenticationProvider 인터페이스 스프링 시큐리티에서 기본으로 제공하는 구현체가 있고, 해당 인터페이스를 상속 받아서 커스텀하게 구현할 수도 있다. authenticate 인증처리를 위한 실제적인 검증을 하는 함수 supports 인증을 처리할 수 있는 기준이 되는지 검사하는 함수 ID 검증 UserDetailsService 인터페이스 구현체를 통해서 User 객체를 조회한다. 전달된 ID를 가지고 User 객체를 조회하고, User 객체가 존재한다면 UserDetails 타입으로 변환해서 AuthenticationProvider로 반환한다. password 검증 UserDetailsService에서 반환받은 UserDetails 객체에 있는 패스워드와 로그인 시 입력된 패스워드를 비교..
-
[스프링 스큐리티] 인증 여부 검증(AuthenticationManager)강의노트/스프링 시큐리티 2020. 9. 14. 22:22
AuthenticationManager AuthenticationProvider 목록 중에서 인증 처리 요건에 맞는 AuthenticationProvider를 찾아 인증 처리를 위임한다. 부모 ProviderManager를 설정하여 AuthenticationProvider를 계속 탐색 할 수 있다. AuthenticationManager에 해당 요청을 처리할 AuthenticationProvider가 없는 경우 부모 AuthenticationManager에서 적합한 AuthenticationProvider를 탐색해서 처리한다. Form 인증 DaoAuthenticationProvider RememberMe 인증 RememberMeAuthenticationProvider Oauth 인증 Oauth 인증을 ..
-
[스프링 시큐리티] Authentication Flow강의노트/스프링 시큐리티 2020. 9. 14. 20:57
AuthenticationManager (ProviderManager) 사용할 수 있는 AuthenticationProvider 리스트를 멤버 변수로 가지고 있다. AuthenticationProvider 리스트에서 현재 인증에 적합한 AuthenticationProvider를 찾아서 인증을 위임한다. AuthenticationProvider (DaoAuthenticationProvider) UserDetailsService에 username을 매개변수로 전달하여 UserDetails 정보를 조회한다. UserDetailsService를 통해서 조회한 User가 존재하는 경우, 해당 User객체의 패스워드와 클라이언트에서 전달 한 패스워드를 일치하는지 검증한다. 패스워드가 일치하지 않으면 BadCrede..
-
[스프링 시큐리티] SecurityContext 객체 생성, 저장, 조회(SecurityContextPersistenceFilter)강의노트/스프링 시큐리티 2020. 9. 14. 20:11
SecurityContextPersistenceFilter SecurityContext 객체를 생성, 저장, 조회한다. Filter 리스트 중 2번째 위치한다. 인증 성공 후 Session에 저장하는 역활을 한다. Save SecurityContext HttpSecurityContextRepository 실질적으로 SecurityContext를 생성, 저장, 조회하는 클래스 동작 시나리오 익명 사용자가 접근 할 경우 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장한다. AnonymousAuthenticationFilter에서 AnonymousAuthenticationToken 객체를 SecurityContext에 저장한다. 인증 사용자가 접근 할 경우 새..
-
[스프링 시큐리티] Authentication 객체 저장소(SecurityContext, SecurityContextHolder)강의노트/스프링 시큐리티 2020. 9. 14. 18:37
SecurityContext Authentication 객체가 저장되는 보관소로 필요 시 언제든지 Authentication 객체를 꺼내 쓸 수 있도록 제공되는 클래스 Authentication 객체 안에는 User 객체가 저장되어 있다. ThreadLocal에 저장되어 아무곳에서나 참조가 가능하다. ThreadLocal? Thread마다 고유하게 할당되는 저장소 인증이 완료되면 HttpSession에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다. SecurityContextHolder SecurityContext 객체를 감싸고 있는 클래스이다. SecurityContext 객체 저장 방식 MODE_THREADLOCAL : 스레드당 SecurityContext 객체를 할당 (default)..
-
[스프링 시큐리티] 인증 정보 저장 객체(Authentication)강의노트/스프링 시큐리티 2020. 9. 14. 18:14
인증 클라이언트가 자신이 주장하는 사용자와 같은 사용자인지를 확인하는 과정이다. 인증 시 id와 password를 담고 인증 검증을 위해 전달되어 사용된다. 인증 후 최종 인증 결과를 Authentication객체(User객체, 권한 정보)에 담고 SecurityContext에 저장되어 전역적으로 참조가 가능해진다. Authentication authentication = SecurityContextHolder.getContext().getAuthentication() 구조 principal : 사용자 아이디 또는 User 객체 credentials : 사용자 비밀번호 authorities : 인증된 사용자의 권한 목록 details : 사용자의 인증 정보 외에 부가 정보 Authenticated : 인..