Security(19)
-
Spring Security - AccessDecisionManager, AccessDecisionVoter
AccessDecisionManager 자원을 요청한 사용자가 해당 자원에 접근을 허용할지 결정하는 주체. 여러 Voter를 가지고 있고, Voter에 요청한 사용자가 자원에 접근해도 괜찮은지 투표를 진행하여, 투표 결과에 따라 접근 허용을 결정한다. 접근 결정에 세 가지 유형이 있다. AffirmativeBased: 여러 개의 Voter 중에 하나의 Voter가 접근 허용을 리턴하면 접근 허용으로 결정. ConsensusBased: 다수표에 의해 결정. 만약 허용과 거부의 수가 같으면 기본값은 접근 허용이나, allowIfEqualGrantedDeniedDecisions을 false로 설정할 경우 접근 거부가 된다. UnanimousBased: 모든 Voter가 접근 허용을 리턴해야지만 접근 허용으로 ..
2021.04.17 -
Spring Security - 인가 플로우, FilterSecurityInterceptor
인가 플로우 FilterSecurityInterceptor 인가를 검증하는 필터. 인증 객체가 없으면 인증 예외(AuthenticationException)를 발생시킨다. SecurityMetadataSource는 자원에 대한 권한을 매핑한 정보를 가지고 있는 클래스로, 여기서 권한 정보가 있는지 판단한다. 권한정보가 없다면 모두 허용하면 됨으로 자원 접근에 허용한다. 권한정보가 있다면 해당 권한이 사용자에게 있는지 AccessDecisionManager가 결정한다. 사용자에게 권한이 없다면 AccessDeniedException을 발생시킨다. 사용자에게 권한이 있다면 자원 접근을 허용한다.
2021.04.17 -
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