Spring/Spring Security
[Spring Security6] 사용자 인증
[Spring Security6] 사용자 인증
2023.08.06스프링 시큐리티의 AuthenticationProvider는 사용자가 로그인 할 때 아이디와 비밀번호를 검증하는 역할을 수행한다. 기본적으로 DaoAuthenticationProvider 구현체를 사용해 데이터베이스에서 사용자 정보를 조회한 후 제공된 자격을 검증하는데, 기본 구현체가 요구사항을 충족시키지 못하는 경우 해당 인터페이스를 직접 구현해 맞춤형 검증 로직을 작성할 수 있다. public interface AuthenticationProvider { Authentication authenticate(Authentication authentication) throws AuthenticationException; boolean supports(Class authentication); } authen..
[Spring Security6] Password Encoder
[Spring Security6] Password Encoder
2023.08.05사용자가 아이디와 비밀번호를 입력하면 스프링 시큐리티는 AuthenticationProvider 를 실행해 저장소에서 UserDetails 객체를 가져온다 (loadUserByUsername 메서드를 사용한다) 데이터베이스에 저장된 비밀번호와 사용자가 입력한 비밀번호를 비교하는데... 여기서 PasswordEncoder를 사용하지 않으면 비밀번호를 Plain Text로 다루고 equals 메서드로 두 비밀번호가 일치하는지 확인한다. 비밀번호를 평문 그대로 다루는건 위험하다. 인코딩 인코딩은 특정 데이터를 다른 형태의 정보로 변환하는 작업을 의미하고, 디코딩은 변환한 데이터를 원본 데이터로 변환하는 작업을 의미한다. 대표적인 예시로 아스키코드, Base64 등이 있다. 이미지나 동영상 데이터를 Base64..
[Spring Security6] 주요 구성요소
[Spring Security6] 주요 구성요소
2023.08.04스프링 시큐리티는 SpringBootWebSecurityConfiguration 파일을 제공해 스프링 부트가 자동으로 제공하는 보안 설정을 구성한다. @Configuration(proxyBeanMethods = false) @ConditionalOnDefaultWebSecurity static class SecurityFilterChainConfiguration { @Bean @Order(SecurityProperties.BASIC_AUTH_ORDER) SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests((requests) -> requests.anyRequ..
[Spring Security6] 내부 흐름
[Spring Security6] 내부 흐름
2023.07.30브라우저는 HTTP 프로토콜을 기반으로 서버에게 요청을 보낸다. 자바로 작성한 애플리케이션은 HTTP 프로토콜을 기반으로 사용자의 요청을 처리하는데... 자바 코드는 HTTP 프로토콜을 이해할 수 없다. 따라서 브라우저와 자바로 작성한 애플리케이션을 이어주는 다리가 필요하다. 스프링은 이 다리로 서블릿을 사용한다. 서블릿은 HTTP 프로토콜을 이해하고 처리할 수 있는 자바 코드로 생각하면 된다. 사용자의 HTTP 요청이 스프링으로 구축된 서버에 도착하면 가장 먼저 웹 애플리케이션 서버인 Tomcat이 요청을 받는다. 이후 Tomcat은 서블릿에게 HTTP 요청을 전달하고 서블릿은 요청을 처리한다. 처리된 요청은 Tomcat에게 전달되고, Tomcat은 사용자에게 HTTP 응답을 제공한다. Tomcat은 ..