본문 바로가기

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

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

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

https://abit.ly/lisbva

 

 

안녕하세요 :)

오늘은 챌린지 57일차로, 챌린지 D-3의 날이네요 벌써..

 

오늘 배울 내용은,

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

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

"03. 리액티브에서의 권한 부여" 입니다.


 

오늘은 리액티브에서의 권한 부여에 대해 배우는 시간을 가졌습니다. 권한 부여는 검증 후 SecurityContext 에 저장된 다음에는 권한 부여를 수행해야 하며, 권한 부여 규칙 구성에는 크게 2가지 방법이 있다.

1. 엔드포인트 계층에 구성을 만드는 방법 : 웹 애플리케이션에서 권한 부여를 구성하는 가장 일반적인 방법이 있다.
2. 다른 계층에 메소드 보안으로 권한 부여 구성을 하는 방법

엔드포인트 계층에 권한 부여하기 위해 엔드포인트를 생성하고,
- /hello => "...111" 출력
- /hello/4 => "...444" 출력

- 사용자와 비밀번호를 설정하고 @EnableWebFluxSecurity 빈을 등록한 뒤, SecurityWebFilterChain 설정한다.

/hello 는 자격 증명을 하지 않았기 때문에 정상 호출 불가능하고,
/hello/4 는 별다른 자격 증명을 입력하지 않았지만 ...444 가 나오고 200 ok 가 떨어지면서 자격 증명을 요하지 않아서 호출 가능하다는 것을 알 수 있었다.

사용자 정보와 함께 호출 시 정상 호출 가능하며, cors, csrf 등 비-리액티브에서의 설정처럼 같은 방식으로 설정 가능하다.

/hello 엔드포인트에 대해서 홀수 분(minute) 에만 요청을 허용하도록 하려면?  QA 테스트 시 번갈아 가면서 활용하면 된다.

그렇게 테스트를 했을 때 홀수 분(minute) 일 때의 결과 => 성공한 것을 볼 수 있었고, 짝수 분(minute) 일 때의 결과 => Access Denied 된 것도 확인할 수 있었다. 코드를 가지고 설정해보면 홀수는 되고 짝수는 안 되는 것 확인이 가능하다. 

메소드 계층에 권한 부여는 @PreAuthorize, @PostAuthorize 어노테이션을 리액티브 애플리케이션에서도 적용 가능하다. @EnableReactiveMethodSecurity 어노테이션을 달아줘야 하고, 달아줘야 AOP와 관련되어 있는 기능들이 잘 동작할 수 있다.

또, Role을 추가하여 .roles("ADMIN") 한 다음에 @PreAuthorize("hasRole('ADMIN')") 기능을 달아주면 기대했던 바처럼 잘 동작하게 된다. 이렇게 이번 시간에는 리액티브 프로그래밍에서의 권한 부여하는 방법에 대해 살펴보았다.