모르지 않다는 것은 아는것과 다르다.

Spring Security 27

WebAuthenticationDetails 와 AuthenticationDetailsSource

개요 사용자가 인증을 요청할때, username, password 이외에 다른 값까지 같이 인증에 포함 시키고 싶은 경우가 있다. 그럴때 WebAuthenticationDetails 를 직접 구현해서 사용한다. WebAuthenticationDetails, AuthenticationDetailsSource 위와 같이 WebAuthenticationDetails 는 인증 과정 중 전달된 데이터를 저장한다. -> Authentication 의 details 속성에 저장한다. WebAuthenticationDetails 는 기본적으로 remoteAddress 와 SessionId 는 가지고 있다. AuthenticationDetailsSource 는 WebAuthenticationDetails 객체를 사용한다..

Spring Security 2022.02.28

CustomAuthenticationProvider

개요 사용자의 이름과 패스워드를 받아서 검증해서 AuthenticationManager 에게 전달하는 AuthenticationProvider 를 커스텀 해서 구현해 보려고 한다. AuthenticationProvider 위와 같이 UserDetailService 로 부터 UserDetails 객체를 전달받아 검증하고 그 결과를 다시 AuthenticationManger 에게 전달한다. 코드 CustomAuthenticationProvider 클래스 구현 public class CustomAuthenticationProvider implements AuthenticationProvider { @Autowired private UserDetailsService userDetailsService; @Auto..

Spring Security 2022.02.28

AuthenticationManager 와 AuthenticationProvider

AuthenticationManager 스프링 시큐리티에서 인증(Authentication)은 AuthenticationManager가 처리한다. AuthenticationProvider 목록 중에서 인증 처리 요건에 맞는 AuthenticationProvider 를 찾아 인증처리를 위임한다. 아래와 같이 부모 ProviderManager 를 설정하여 AuthenticationProvider 를 계속 탐색 할 수 있다. public interface AuthenticationManager { Authentication authenticate(Authentication authentication) throws AuthenticationException; } authentication 이 유효한 인증인지 확..

Spring Security 2022.02.28

Security Config

스프링 시큐리티 의존성 추가 스프링 시큐리티 의존성만 추가해도 서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다. 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동한다. 모든 요청은 인증 되어야 자원에 접근이 가능하다. 인증 방식은 폼 로그인 방식과 httpBasic 로그인 방식을 제공한다. 기본 로그인 페이지를 제공한다. 기본 계정을 한개 제공한다. WebSecurityConfigurerAdapter 스프링 시큐리티의 웹 보안 기능을 초기화 및 설정하는 역할을 한다. HttpSecurity 를 생성한다. -> HttpSecurity 는 세부적인 보안 기능을 설정할 수 있는 API 를 제공한다. HttpSecurity는 위와 같이 인증 API..

Spring Security 2022.02.28

SecurityContextHolder 와 FilterChainProxy

FilterChainProxy springSecurityFilterChain 의 이름으로 생성되는 필터 빈이며, Security Filter 들을 관리하는 빈이다. DelegatingFilterProxy 으로 부터 요청을 위임 받고 실제 보안 처리한다. 스프링 시큐리티 초기화 시 생성되는 필터들을 관리하고 제어한다. FilterChainProxy는 요청에 따라 적합한 SecurityFilterChain 을 사용한다. 기본 전략으로 DefaultSecurityFilterChain을 사용한다. -> DefaultSecurityFilterChain 는 Filter 리스트를 가지고 있다. 사용자의 요청을 필터 순서대로 호출하여 전달한다. 사용자정의 필터를 생성해서 기존의 필터 전.후로 추가 가능하다. 아래에서 ..

Spring Security 2022.02.28

SecurityContextHolder, AuthenticationManager, ThreadLocal

SecurityContext, SecurityContextHolder SecuuryContext Authentication 제공한다. Authentication 객체가 저장되는 보관소로 필요 시 언제든지 Authentication 객체를 꺼내어 쓸 수 있도록 제공되는 클래스다. ThreadLocal 에 저장되어 아무 곳에서나 참조가 가능하도록 설계되어 있다. 인증이 완료되면 HttpSession 에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다. SecurityContextHolder SecurityContext를 제공하고, 기본적으로 ThreadLocal을 사용한다. 위의 정보들은 같은 쓰레드내에서 공유하는 정보이다. -> 만약에 쓰레드가 달라지면? -> SecurityContextHold..

Spring Security 2022.02.28

스프링 시큐리티 아키텍처

Spring Security Architecture Spring Security Architecture 를 그림으로 나타내면 아래와 같다. 요청이 들어오면 서블릿 필터중에 DeligationFilterProxy 라는 필터가 FilterChainProxy를 SecurityFilterAutoConfiguration 이라는 이름의 빈으로 등록 한다. FilterChainProxy 는 요청에 따라 적합한 필터들이 체인형태로 구성된 SecurityFilterChain 을 사용한다. -> 이는 WebSecurity 에 의해서 만들어진다. 이러한 필터들이 사용하는 객체들이 있는다. 인증 -> AuthenticationManager 인가 -> AccessDecisionManager AuthenticationManage..

Spring Security 2022.02.28