Language/Spring Security (59) 썸네일형 리스트형 [PasswordEncoder] BCryptPasswordEncoder Spring Security 의존성을 추가 해야만 PasswordEncoder 제공PasswordEncoder의 구현체인 BCryptPasswordEncoder은 Hashing(해싱) 방식을 사용하여 복호화가 불가능한 단방향 방식비밀번호는 노출이 되어서는 안 되기 때문에 암호화를 시키고 복호화를 할 필요가 없이, 사용자가 입력한 비밀번호가 맞는지만 검증하면 되기 때문에 BCryptPasswordEncoder를 사용 BCryptPasswordEncoder 사용 이유? 강력한 해시 알고리즘BCrypt는 해시 계산이 느리기 때문에 공격자가 무작위 대입 공격(Brute-force attack)을 시도하는 데 시간이 더 많이 소요Salt 자동 생성BCrypt는 내부적으로 랜덤한 salt 값을 생성하여 해싱 과정에.. Redis를 활용한 이중화 설정 - @EnableRedisHttpSession 이중화는 시스템의 부하를 분산하고, 단일 실패 지점(Single Point of Failure, SPOF) 없이 서비스를 지속적으로 제공하는 아키텍처를 구현하는 것을 목표로 하며 스프링 시큐리티는 이러한 이중화 환경에서 인증, 권한 부여, 세션 관리 등의 보안 기능을 제공스프링 시큐리티는 사용자 세션을 안전하게 관리하며 이중화된 환경에서 세션 정보를 공유할 수 있는 메커니즘을 제공하며 대표적으로 레디스 같은 분산 캐시를 사용하여 세션 정보를 여러 서버 간에 공유 가능레디스 세션 서버로컬 환경 (Linux 기준)대부분의 Linux 에서 apt 또는 yum을 사용하여 레디스를 설치 가능sudo apt-get install redis-server, sudo yum install redis ..설치 후 sudo.. Custom DSLs - HttpSecurity.with(AbstractHttpConfigurer) Custom DSLs - HttpSecurity.with(AbstractHttpConfigurer)Spring Security는 사용자 정의 DSL을 구현할 수 있도록 지원DSL(Domain Specific Language)을 구성하면 필터, 핸들러, 메서드, 속성 등을 한 곳에 정의하여 처리할 수 있는 편리함을 제공 AbstractHttpConfigurer사용자 DSL을 구현하기 위해서 상속 받는 추상 클래스로서 구현 클래스는 두 개의 메서드를 오버라이딩init(B builder) → HttpSecurity 의 구성요소를 설정 및 공유하는 작업 등..configure(B builder) → 공통 클래스를 구성 하거나 사용자 정의 필터를 생성하는 작업 등.. APIHttpSecurity.with(C co.. 다중 보안 설정 Spring Security는 여러 SecurityFilterChain @Bean을 등록해서 다중 보안 기능을 구성 가능@Configuration@EnableWebSecuritypublic class MultiHttpSecurityConfig { @Bean @Order(1) public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception { http.securityMatcher("/api/**") // HttpSecurity가 /api/로 시작하는 URL 에만 적용 .authorizeHttpRequests(authorize -> authorize .anyRequest().hasRole("ADMIN")) .httpBasic.. Spring MVC 비동기 통합 - WebAsyncManagerIntergrationFilter Spring Security 는 Spring MVC Controller에서 Callable을 실행하는 비동기 스레드에 SecurityContext를 자동으로 설정하도록 지원Spring Security는 WebAsyncManager와 통합하여 SecurityContextHolder에서 사용 가능한 SecurityContext를 Callable에서 접근 가능하도록 해줌 → 기본적으로 부모 ThreadLocal과 자식 ThreadLocal은 공유가 되지 않는데, WebAsyncManager를 사용하여 부모 ↔ 자식 간의 SecurityContext를 공유할 수 있도록 함 WebAsyncManagerIntegrationFilterSecurityContext와 WebAsyncManager 사이의 통합을 제공하며 .. Spring MVC 통합 - @AuthenticationPrincipal Spring Security는 Spring MVC 인수에 대한 현재 Authentication.getPrincipal()을 자동으로 해결 할 수 있는 AuthenticationPrincipalArgumentResolver를 제공Spring MVC 에서 @AuthenticationPrincipal을 메서드 인수에 선언하게 되면 Spring Security와 독립적으로 사용 가능@AuthenticationPrincipal 어노테이션이 메소드 호출 전 Authentication으로 부터 customer 객체를 principal에서 꺼내서 customUser의 인자로 전달해주는 역할 @AuthenticationPrincipal(expression=”표현식”)Principal 객체 내부에서 특정 필드나 메서드에 .. Servlet API 통합 - SecurityContextHoladerAwareRequestFilter 스프링 시큐리티는 다양한 프레임워크 및 API 와의 통합을 제공하고 있으며 Servlet 3과 Spring MVC 와 통합을 통해 여러 편리한 기능들을 사용 가능인증 관련 기능들을 필터가 아닌 서블릿 영역에서 처리 가능Servlet3+ 통합SecurityContextHolderAwareRequestFilterHTTP 요청이 처리될 때 HttpServletRequest에 보안 관련 메소드를 추가적으로 제공하는 래퍼(SecurityContextHolderAwareRequestWrapper) 클래스를 적용이를 통해 개발자는 서블릿 API 의 보안 메소드를 사용하여 인증, 로그인, 로그아웃 등의 작업을 수행 가능HttpServlet3RequestFactoryServlet 3 API 와의 통합을 제공하기 위한 S.. 인가 이벤트 - Authorization Events Spring Security는 권한 부여 이벤트 처리를 지원하며 권한이 부여되거나 거부된 경우에 발생하는 이벤트를 수신 가능이벤트를 수신하려면 ApplicationEventPublisher 를 사용하거나 시큐리티에서 제공하는 AuthorizationEventPublisher를 사용해서 발행해야 함AuthorizationEventPublisher의 구현체로 SpringAuthorizationEventPublisher가 제공 이벤트 발행 방법ApplicationEventPublisher.publishEvent(ApplicationEvent)AuthorizationEventPublisher.publishAuthorizationEvent(Supplier, T, AuthorizationDecision) 이벤트 수.. 이전 1 2 3 4 ··· 8 다음