Back-End/Security

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 부분이 도..
복호화가 불가능하고 암호화만 가능한 암호화 방식 해시 함수를 사용하여 암호화를 진행하며 아래와 같은 특성이 있다. 항상 같은 길이의 문자열을 리턴한다 문자열에 해시 함수 적용 시 서로 다른 문자열은 항상 다른 결과를 반환한다. 반대로 서로 같은 문자열은 항상 같은 결과를 반환한다. 같은 문자라면 결과가 항상 같다는 것 레인보우 테이블 항상 같은 결과를 반환하는 특성을 이용해 해시 함수 적용 전의 값을 알아낼 수 있도록 기록해두는 테이블 이 테이블이 유출되는 경우 해싱이 되었더라도 이전의 값을 알아낼 수 있어 위험하다. 솔트 단어 그대로 소금을 치듯 해싱 이전 값에 임의의 값을 더하여 데이터가 유출되어도 데이터를 알아내기 어렵게 만드는 방법 해싱 값이 유출되더라도 솔트가 유출되는 것이 아니라면 안전함 복호..
Hyper Text Transfer Protocol + Secure Socket layer의 약자로 기존의 HTTP에 보안 기능을 추가한 계층이라고 볼 수 있다. HTTP 요청을 SSL 혹은 TLS라는 알고리즘을 이용해 통신 과정에서 데이터를 암호화하여 전송하는 방법이다. HTTPS의 장점 암호화 서버와 클라이언트가 주고 받는 정보를 중간에 제 3자가 탈취할 수 없도록 정해둔 방법으로 데이터를 암호화하여 주고 받기 때문에 데이터가 탈취되어도 데이터를 알아볼 수 없다. 클라이언트와 서버 간의 데이터는 비대칭키와 대칭키 방식을 혼용해서 사용하기 때문에 데이터를 복호화하기 전까지 제 3자는 데이터를 알 수가 없기 때문이다. 클라이언트와 서버 간의 데이터를 주고 받을 때는 양쪽이 비밀 키를 공유하여 데이터를 암..
da9dac
'Back-End/Security' 카테고리의 글 목록 (3 Page)