Back-End

DelegatingPasswordEncoder의 장점 DelegatingPasswordEncoder는 비밀번호를 암호화 할 때 사용했던 PasswordEncoder 구현 객체를 생성해주는 컴포넌트다. 사용할 암호화 알고리즘을 지정하지 않으면 스프링 시큐리티가 권장하는 최신 암호화 알고리즘을 적용하여 패스워드를 암호화 해준다. 암호화 방식을 변경할 일이 생겨도 언제든 암호화 방식을 바꿀 수 있다. (기존 암호화 된 패스워드에 대한 마이그레이션 필요) 커스텀 DelegatingPasswordEncoder 생성 PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); 기존에는PasswordEncode..
사용자의 요청이 왔을 때 스프링 시큐리티가 어떤 일들을 수행하는지 로그인 과정을 통해 알아보겠다. 인증과 인가 우선은 인증과 인가의 개념과 차이에 대해서 알아야 한다. 이름은 비슷하지만 둘의 역할은 조금 다른데 인증은 말그대로 만약 사용자라는 객체가 있다면 해당 객체가 유효한지 인증해주는 것이다. 인가는 인증된 객체가 어디까지 접근할 수 있는지 객체의 권한을 확인한다. 로그인을 통해 사이트의 인증을 받았다면 로그인한 사용자의 권한에 따라서 이용할 수 있는 기능을 제한하는 것이 인가라고 볼 수 있다. 사용자 시점 사용자가 정확한 인증 정보를 서버에 제공 하였다면 아래와 같은 순서대로 요청이 처리된다. 정확한 로그인 정보(Credential) 제공 로그인 성공 접근 권한이 있는 요청 전달 응답 받은 정보 조..
AuthenticationProvider 커스텀하기 @Component public class CustomUserAuthenticationProvider implements AuthenticationProvider { // (1) private final CustomUserDetailsService userDetailsService; private final PasswordEncoder passwordEncoder; public HelloUserAuthenticationProvider(CustomUserDetailsService userDetailsService, PasswordEncoder passwordEncoder) { this.userDetailsService = userDetailsService..
UserDetailsService 데이터베이스에서 조회한 회원의 인증 정보를 기반으로 인증을 처리하는 커스텀 UserDetailsService를 구현해 보겠다. UserDetailsService는 스프링 시큐리티에서 제공해 주는 컴포넌트로 인증에 필요한 사용자의 정보를 로드하는 인터페이스다. 인메모리 데이터베이스를 사용할 때 보았던 InMemoryUserDetailsManager는 UserDetailsManager의 구현체이고 UserDetailsManager는 UserDetailsService를 상속한 인터페이스다. 즉, UserDetailsService = UserDetailsManager + UserDetailsService CustomUserDetailsService @Component publi..
패스워드 인코더 클라이언트로부터 받아온 패스워드 같은 민감한 정보는 받아온 그대로 데이터베이스에 저장하는 것이 아니라 저장하기 전에 암호화해줘야 한다. 스프링 시큐리티에서는 이러한 암호화 기능을 제공해 주기 때문에 PasswordEncoder 클래스를 사용기만 하면 된다. @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } 우선 PasswordEncoder의 구현 객체를 만들기 위해 PasswordEncoderFactories의 createDelegatingPasswordEncoder 메서드를 사용하여 DelegatingPasswordEncoder..
스프링 시큐리티 스프링 MVC/WebFlux 기반 애플리케이션의 인증과 인가 기능을 지원하는 보안 프레임워크 주로 아래와 같은 기능들을 제공한다. 다양한 유형의 사용자 인증 기능 적용 (폼 로그인, 토큰 기반, OAuth2 기반 등의 인증) 사용자의 역할에 따른 권한 레벨 적용 리소스에 대한 접근 제어 민감한 정보의 데이터 암호화 SSL 적용 일반적으로 알려진 공격 차단 SSO 클라이언트 인증서 기반 인증 메서드 보안 접근 제어 목록 위에 언급한 것 외에도 많은 기능들을 제공한다. 사용해 보기 implementation 'org.springframework.boot:spring-boot-starter-security' gradle 설정에 스프링 시큐리티 의존성을 추가해 준다. 해당 의존성만 추가한 후에 ..
세션 기반 인증 세션 : 사용자가 인증에 성공한 상태로 세션 스토어나 인메모리 DB에 저장 됨 세션 아이디 : 각 세션을 구분할 수 있는 기본키 같은 역할 로그인 1. 만약 사용자가 로그인을 요청한 후에 성공했을 경우 서버는 세션을 만들어 저장한 후에 세션의 아이디를 클라이언트에 전달 2. 로그인을 유지할 수단으로 쿠키를 사용하며 이때 쿠키에 세션의 아이디를 저장해둔다. 3. 쿠키에 저장된 세션 아이디를 서버에 전달하면서 세션 스토어에 저장하는 세션이면 로그인 상태가 검증되기 때문에 쿠키와 세션을 사용해 로그인 상태를 유지할 수 있다. 로그아웃 세션은 로그인 성공에 대한 증명 정보를 가지고 있는 일종의 서버 측에 자유롭게 드나들 수 있는 프리패스권과 같은 개념이다. 그래서 로그아웃을 하기 위해서는 서버 ..
쿠키는 서버에서 클라이언트에 데이터를 저장하는 방법으로 서버에서 클라이언트에 쿠키를 저장하는 것만 의미하는 것이 아니라 클라이언트에서 서버로 쿠키를 전송하는 것도 포함된다. 쿠키의 특징 서버가 클라이언트에 데이터를 저장할 수 있지만 가져올 때는 조건이 있다 쿠키 옵션을 만족하는 경우에만 클라이언트로부터 데이터를 가져올 수 있다. 다양한 쿠키 옵션이 존재하지만 주로 사용되는 것들은 Domain, Path, MaxAge, Expires, Secure, HttpOnly, SameSite 등이 있다. Domain https://n.news.naver.com/mnews/article/003/0011960011?sid=104 도메인은 서버에 접속할 수 있는 이름을 말하며 위의 주소에서는 naver.com 부분이 도..
da9dac
'Back-End' 카테고리의 글 목록 (4 Page)