본문 바로가기

패스트캠퍼스/100% 환급 챌린지_2

패스트캠퍼스 환급챌린지 56일차 : Netplix 구독형 멤버십 프로젝트로 배우는 Spring Security 강의 후기

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

안녕하세요 :)

오늘은 챌린지 56일차로, 이렇게 챌린지 마지막 일요일을 보내고 있습니다.

 

오늘 배울 내용은,

Part D. 스프링 시큐리티 활용

Ch 1. 스프링 시큐리티와 리액티브 프로그래밍

"02. 리액티브에서의 사용자 관리" 입니다.


 

오늘은 리액티브에서의 사용자 관리에 대해 알아보는 시간을 가졌다.

 

먼저 리액티브 프로그래밍에서는 UserDetailsService 를 ReactiveUsersDetailService 라는 인터페이스를 제공하고 있다. username 을 파라미터로 받고 있고, findByUsername 이라는 메소드를 제공하고 있다. 그리고 직접 Mono<UserDetails> 를 반환한다.

이를 활용하기 위해 설정을 해주어야 하는데, Configuration 어노테이션을 달아주었다. ReactiveUserDetailsService 설정은 MapReactiveUserDetailsService 반환(인메모리와 마찬가지로 메모리에 저장함)하도록 했다.


애플리케이션 구동은 Netty 기반으로 이루어지고, 테스트는 올바른 자격 증명이 인증되었을 때만 엔드포인트를 호출할 수 있다.

커스텀 인증 흐름은 커스텀하게 인증 논리를 구현하려면 ReactiveAuthenticationManager 인터페이스를 구현해야 한다. 리액티브 아키텍쳐 자체는 비-리액티브 아키텍쳐와 크게 다르지 않다.

- HTTP 요청을 가로채고, 인증 책임을 ReactiveAuthenticationManager 에게 위임한다.
-> AuthenticationWebFilter -> ReactiveAuthenticationManager : 리액티브 앱에서 인증 관리자는 ReactiveAuthenticationManager 인터페이스를 구현한다.

-> ReactiveUserDetailsService : 사용자 세부 정보는 ReactiveUserDetailsService 에서 얻는다.
-> PasswordEncoder

또한 리액티브 방식에서는 스프링 프레임워크가 Mono<Authentication> 을 주입할 수 있다. Authentication 객체의 출처는 리액티브 앱이기 때문에 ThreadLocal 에 의존한 SecurityContext 를 사용할 수 없다. 리액티브 앱을 위한 다른 컨텍스트 홀더 구현체인 ReactiveSecurityContextHolder 를 사용할 수 있다.

-> AuthenticationWebFilter -> ReactiveAuthenticationManager : 인증 프로세스가 완료되면 ReactiveAuthenticationManager 가 AuthenticationWebFilter 에 Authentication 을 반환함 -> AuthenticationWebFilter : AuthenticationWebFilter 는 권한 부여에 이용할 수 있도록 SecurityContext 에 Authentication 인스턴스를 저장함 -> SecurityContext