스프링 24

[시큐리티] 필터

1. 개념 요청을 수신하고 요청에서 요구하는 논리를 실행하며 실행을 모두 마치고 난 이후에는 체인의 다음 필터로 요청을 넘긴다. 예를 들어 숟가락을 쥔다, 숟가락으로 밥을 푼다, 푼 받을 입에 가져다가 넣는다, 씹는다 이런 과정이 있을 때 숟가락을 쥐는 것 부터 씹는 것까지의 전체 과정을 체인이라고 본다. 그리고 각 행위를 필터라고 본다. 2. 특징 스프링 시큐리티는 기본 필터도 제공하고, 맞춤형으로 필터를 새로 정의하는 것도 가능하게 함. 그리고 새롭게 정의한 필터를 체인에 추가할 수 있음 필터는 책임을 관리자에게 위임함 스프링 시큐리티 아키텍처의 필터는 일반적인 HTTP 필터 여러 필터가 같은 순서값을 가질 수 있는데, 스프링 시큐리티는 같은 순서값일 경우 어떤 걸 먼저 호출할 지 딱히 정해놓지 않는..

Spring/security 2023.03.23

[시큐리티] 권한과 역할제어

1. 권한 부여 1) 개념 식별된 클라이언트가 요청된 리소스에 엑세스할 권한이 있는지 시스템이 결정하는 프로세스 2) 특징 인증 흐름을 완료한 후 요청을 권한 부여 필터에 위임하고, 필터는 구성된 권한 부여 규칙에 따라 요청을 허용하거나 거부함. 즉, 항상 인증 이후에 수행됨 인증 프로세스 도중 UserDetailsService는 사용자의 권한을 포함한 모든 세부 정보를 얻음. 애플리케이션은 사용자를 성공적으로 인증한 후 GrantedAuthority 인터페이스로 나타내는 권한으로 권한 부여를 수행함 3) 과정 2. GrantedAuthority 1) 개념 사용자가 수행할 수 있는 작업을 GrantedAuthority 인터페이스로 나타냄 2) 특징 UserDetails는 GrantedAuthority 인..

Spring/security 2023.03.21

[시큐리티] SecurityContext

1. SecurityContext 개념 인증 프로세스를 성공적으로 완료한 후 요청이 유지되는 동안 AuthenticationManager는 Authentication 인스턴스를 저장한다. Authentication 객체를 저장하는 인스턴스를 보안 컨텍스트라고 한다. 여기서 Authentication은 인증된 엔티티에 대한 세부 정보(사용자의 이름이나 권한) public interface SecurityContext extends Serializable { Authentication getAuthentication(); void setAuthentication(Authentication authentication); } 2. SecurityContext를 관리하는 전략 1) MODE_THREADLOCAL ..

Spring/security 2023.03.16

[시큐리티] AuthenticationProvider

1. Authentication 1) 개념 인증 요청 그 자체를 나타내며, 애플리케이션에 접근을 요청한 엔티티의 세부 정보를 담음 2) 특징 Authentication에는 암호 같은 요구 사항이나 인증 요청에 대한 세부 정보를 더 추가할 수 있음 Authentication 계약은 Principal 계약을 상속한다 Principal은 애플리케이션에 접근을 요청하는 사용자를 의미하며, 인증하려는 사용자의 이름 정보 등을 가지고 있다. Authentication 계약은 애플리케이션에 접근을 요청한 주체에 대한 정보만 나타내는 것이 아니라 인증 프로세스 완료 여부, 요청한 주체의 권한 컬렉션 정보도 가지고 있다 3) 인터페이스 코드 isAuthenticated() 인증 프로세스가 끝났으면 true를 반환하고, ..

Spring/security 2023.03.15

[시큐리티] PasswordEncoder

1. PasswordEncoder 계약 1) 정의 계약을 구현해 스프링 시큐리티에 사용자 암호를 검증하는 방법을 알려줄 수 있음 인증 프로세스에서 암호가 유효한지를 확인 2) 인터페이스 코드로 계약 구현 public interface PasswordEncoder { String encode(CharSequence rawPassword); boolean matches(CharSequence rawPassword, String encodedPassword); default boolean upgradeEncoding(String encodedPassword){ return false; } } encode 및 matches 메서드는 계약의 책임을 정의 encode 주어진 문자열을 변환해 반환 암호화 수행 mat..

Spring/security 2023.03.15

[시큐리티] UserDetailsService

1. UserDetails 1) 개념 스프링 시큐리티가 관리하는 사용자를 나타냄 2) 특징 하나 이상의 권한을 가짐 UserDetails 계약을 구현해서 프레임워크가 이해할 수 있게 사용자를 기술 3) UserDetails 인터페이스 코드 public interface UserDetails extends Serializable { // 인증과 관련된 세부 정보, 사용자 자격 증명을 반환하는 메서드 String getUsername(); // 사용자 이름 반환 String getPassword(); // 사용자 암호 반환 // 사용자가 애플리케이션의 리소스에 접근할 수 있도록 권한 부여하기 위한 메서드 Collection

Spring/security 2023.03.13

[시큐리티] 인증 방법

1. http basic 인증 1) 개념 2) 방법 username:password 문자열을 Base64로 인코딩한다 Authorization 헤더의 값으로 Basic + 위의 인코딩값을 설정하고 보낸다 3) 설정 @Configuration public class ProjectConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception{ http.httpBasic(); http.authorizeRequests().anyRequest().authenticated(); } } 4) 특징 자격 증명의 기밀성을 보장하지 않는다 base64는 단지 전송의 편의를 위한..

Spring/security 2023.03.10

[시큐리티] 스프링 시큐리티 인증 프로세스 구성 요소

1. 스프링 시큐리티의 인증 프로세스에 포함된 주 구성 요소와 관계 1) 인증 필터 인증 요청을 인증 관리자에 위임하고 응답을 바탕으로 보안 컨텍스트를 구성한다 2) 인증 관리자 인증 공급자를 이용해 인증을 처리한다 3) 인증 공급자(AuthenticationProvider) 인증 논리를 구현한다 사용자 관리 책임을 구현하는 사용자 세부 정보 서비스(UserDetailService)를 인증 논리에 이용한다 암호 관리를 구현하는 암호 인코더(PasswordEncoder)를 인증 논리에 이용한다 4) 보안 컨텍스트 인증 프로세스 후 인증 데이터를 유지한다 2. UserDetailsService 1) 개념 사용자 이름으로 사용자 세부 정보를 검색하는 객체 2) 하는 일 사용자에 관한 세부 정보를 관리 인증 공..

Spring/security 2023.03.10

[시큐리티] 스프링 시큐리티 기본 개념 및 보안에 대한 개념

1. 스프링 시큐리티 개념 스프링 애플리케이션에 보안을 적용하는 과정을 크게 간소화하는 프레임워크 2. 스프링 시큐리티 방법 어노테이션, 빈, 메서드 등 스프링 방식의 구성 스타일을 이용해서 애플리케이션 수준의 보안을 정의한다 보안을 구성하는 방법은 본인 하기 나름이다. 간단하게 할 수도 있고, 복잡하게 할 수도 있다 보통, 누가 작업을 수행할 수 있는지 결정(인증), 특정 사람이 특정 데이터를 이용할 수 있는지 결정(권한), 데이터 전송 및 저장 과정에서 올바른 전송 및 저장인지 결정하는 방식 사용 인증: 애플리케이션이 사용자를 식별하는 방법 권한 부여: 사용자 식별 후 나중에 이들이 무엇을 하도록 허용해야 하는지 결정 3. 보안이란 애플리케이션은 전화번호, 이메일 주소, 신용카드 번호 등의 정보에 접..

Spring/security 2023.03.09