본문 바로가기

분류 전체보기

(122)
[Spring Boot] Security6 단일 권한 및 다중 권한 여러 개의 권한을 가지고 있는 사용자를 처리하기 위해 Spring Security에서는 GrantedAuthority 객체의 리스트를 사용합니다. 이러한 권한 정보는 UserDetails 객체 또는 Authentication 객체에 포함되어 인증 및 권한 검사를 수행하는 동안 지속적으로 참조됩니다.단일 권한을 사용하는 예제package com.booktory.booktoryserver.Users.service;import com.booktory.booktoryserver.Users.dto.request.UserRegisterDTO;import com.booktory.booktoryserver.Users.mapper.UserMapper;import com.booktory.booktoryserver.User..
[Spring Boot] Security6 CSRF (Cross-Site Request Forgery) 및 설정 방법 CSRF(Cross-Site Request Forgery)는 사용자가 의도하지 않은 작업을 웹 애플리케이션에서 수행하도록 유도하는 공격 기법입니다. 이 공격은 사용자의 신원을 직접적으로 훔치지 않지만, 사용자가 자신도 모르는 사이에 행동을 취하도록 합니다. 이를 통해 공격자는 사용자의 권한을 이용해 악의적인 요청을 수행할 수 있습니다.단계별 CSRF 공격 설명단계 1: 사용자가 Netflix에 로그인사용자는 netflix.com에 로그인합니다.Netflix 서버는 사용자의 인증을 확인한 후, 해당 사용자의 브라우저에 쿠키를 생성하고 저장합니다.이 쿠키는 netflix.com 도메인에 대해 유효하며, 다른 도메인에서는 접근할 수 없습니다.단계 2: 사용자가 악성 웹사이트(evil.com)에 방문영화를 본 ..
[Spring Boot] Security6 CORS (Cross-Origin Resource Sharing) 및 설정 방법 정의와 목적:CORS는 웹 페이지의 스크립트가 페이지를 제공한 도메인과 다른 도메인에 요청을 할 수 있도록 하는 프로토콜입니다. 이는 여러 서버나 도메인에서 자원을 필요로 하는 웹 애플리케이션에 종종 필요합니다.기본적으로 웹 브라우저는 보안상의 이유로 이러한 교차 출처 요청을 차단합니다.출처 개념:출처는 스킴(프로토콜), 도메인(호스트), 포트의 조합으로 구성됩니다.다른 출처:다른 스킴 (예: HTTP vs. HTTPS)다른 도메인다른 포트브라우저의 기본 동작:Chrome, Firefox, Safari와 같은 최신 브라우저는 보안상의 이유로 기본적으로 교차 출처 요청을 차단합니다.이는 공격이나 취약점이 아니라 웹 애플리케이션을 악의적인 활동으로부터 보호하기 위한 보안 기능입니다.교차 출처 통신:한 도메인..
[Spring Boot] Security6 나만의 Authentication 로직 구현 UserDetailsService를 사용하지 않고, 직접 AuthenticationProvider를 구현하는 것은 특정 상황에서 유용할 수 있습니다. 예를 들어, 사용자 인증 로직이 매우 특화된 경우나, 기존 UserDetailsService를 사용하는 방식이 맞지 않는 경우에 이러한 접근 방식을 사용할 수 있습니다. 그러나, Spring Security가 제공하는 기본 구조와 원칙을 따르는 것이 일반적으로 더 나은 선택일 수 있습니다. 이를 통해 Spring Security의 강력한 기능과 확장성을 활용할 수 있기 때문입니다. package com.example.loans_domain.config;import com.example.loans_domain.model.Customer;import com.e..
[Spring Boot] Security6 PasswordEncoder 활용 BCryptPasswordEncoder 소개BCrypt 해싱 알고리즘: 1999년에 발명된 알고리즘으로, 지난 20년 동안 광범위하게 사용되며 주기적으로 업데이트됨.패턴: 해시 텍스트는 $2a, $2y, $2b와 같은 패턴을 가짐.기본 설정: Spring Security는 기본적으로 $2a 버전을 사용하며, 필요에 따라 버전을 변경할 수 있음.BCryptPasswordEncoder 설정빈 생성자: 기본 생성자를 호출하면 -1 값으로 초기화되고, 기본적으로 버전 $2a와 작업량 10을 사용함.커스터마이징: 버전, 강도, SecureRandom 값을 전달하여 커스터마이즈할 수 있음. SecureRandom 값은 무작위 솔트를 추가하여 해싱 과정을 더욱 안전하게 만듦.BCryptPasswordEncoder 사..
[Spring Boot] Security6 PasswordEncoder의 주요 구현체 Spring Security에서 다양한 PasswordEncoder 구현체를 사용할 수 있습니다. 1. NoOpPasswordEncoder설명: 비밀번호를 아무런 해싱, 인코딩, 암호화 없이 일반 텍스트로 저장합니다.추천 사용 환경: 데모 애플리케이션, 비운영 환경운영 환경 사용 여부: 사용하지 않음이유: 비밀번호가 평문으로 저장되므로 보안에 취약합니다.2. StandardPasswordEncoder설명: SHA-256 해싱 알고리즘을 사용하여 비밀번호를 해싱하며, 시스템 전체 비밀 값을 추가적으로 사용하여 보호합니다.추천 사용 환경: 레거시 애플리케이션운영 환경 사용 여부: 사용하지 않음이유: 사용이 중단(Deprecated)되었으며, 보안성 측면에서 더 이상 안전하지 않습니다.3. Pbkdf2Pass..
[Spring Boot] Security6 DaoAuthenticationProvider DaoAuthenticationProvider 클래스는 Spring Security에서 사용자 인증을 처리하는 데 사용되는 주요 클래스 중 하나입니다. 이 클래스는 AuthenticationProvider 인터페이스를 구현하여 사용자 정보를 로드하고 인증을 수행합니다. 1. additionalAuthenticationChecks 메서드이 메서드는 인증 과정에서 추가적인 검사를 수행합니다. 여기서는 사용자가 입력한 비밀번호가 데이터베이스에 저장된 비밀번호와 일치하는지 확인합니다.입력된 비밀번호 확인: authentication.getCredentials()를 사용하여 입력된 비밀번호를 가져옵니다.비밀번호 비교: passwordEncoder.matches()를 사용하여 입력된 비밀번호와 데이터베이스에 저장된..
[Spring Boot] Security6 암호(비밀번호) 관리 방법 인코딩, 암호화, 해싱 인코딩 (Encoding)정의: 인코딩은 데이터를 한 형식에서 다른 형식으로 변환하는 과정입니다. 인코딩은 주로 데이터를 전송하거나 저장하기 위해 특정 형식으로 변환하는 데 사용됩니다. 인코딩 자체는 보안 목적이 아니며 암호학과는 관련이 없습니다.특징:비밀 필요 없음: 인코딩 과정에는 비밀 키나 비밀 정보가 필요하지 않습니다. 누구나 인코딩과 디코딩을 수행할 수 있습니다.되돌릴 수 있음: 인코딩된 데이터는 원본 데이터로 완전히 되돌릴 수 있습니다. 즉, 인코딩은 가역적입니다.목적: 인코딩은 데이터의 형식을 변환하여 전송이나 저장을 쉽게 하거나, 특정 시스템이 데이터를 처리할 수 있도록 합니다.사용 예시:ASCII: 문자 데이터를 컴퓨터가 이해할 수 있는 숫자 형식으로 변환합니다.BASE64: 바이너리 데..
[Spring Boot] Security6 로그인 및 회원가입 ( + 동작 과정 ) 회원가입DTO@Entity@Getter@Setterpublic class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String email; private String pwd; private String role;} Controller@RestController@RequiredArgsConstructorpublic class LoginController { private final CustomRepository customRepository; private final PasswordEncoder passwordEncoder; @PostM..
[Spring Boot] Security6 UserDetailsManager 구현체 InMemoryUserDetailsManagerInMemoryUserDetailsManager는 사용자 정보를 메모리에 저장하고 관리하는 구현체입니다. 이 구현체는 주로 개발 및 테스트 목적으로 사용되며, 애플리케이션이 종료되면 모든 사용자 정보가 사라집니다.주요 특징:저장소: 메모리사용 사례: 간단한 테스트나 데모 애플리케이션장점: 설정이 간단하고 빠르게 사용할 수 있습니다.단점: 애플리케이션이 종료되면 데이터가 사라지며, 많은 사용자 정보를 관리하기에는 부적합합니다. import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springfram..