인프런 커뮤니티 질문&답변

qpal1zm23님의 프로필 이미지

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Users Microservice - AuthorizationHeaderFilter 추가

gateway와 userService 간의 인증 정보 공유 문제에 관해 질문 드립니다!

23.11.02 00:07 작성

·

403

·

수정됨

0

안녕하세요 선생님 강의 잘 듣고 있습니다.

강의 수강 중 질문이 생겨서요!

 

  1. user-service는 mvc 기반의 app으로 spring security를 통해 인증을 처리하므로, tomcat의 JSESSIONID 를 기반으로 하여 Security Context에 Authentication 객체의 유무를 통해 인증이 된 사용자인지 안 된 사용자인지 Security Filter Chain에서 체크를 하는 것으로 알고 있습니다.

그런데

  • gateway에서 설정하신 application.yml 에 따르면 모든 요청 헤더에 존재하는 Cookie를 삭제하고 --> 서버에서 매번 새 요청으로 인식

  • gateway 는 netty 서버를 사용하고 user-service는 tomcat 서버를 사용하잖아요.
    그래서 두 서버 사이 Context가 공유가 안 될것 같아서요... 그래서 gateway에서는 인증을 했다고 요청을 넘기지만 user-service에서는 그 요청을 받았을 때 해당하는 SESSIONID 의 Context에 Authentication 객체가 존재하지 않아 인증이 필요한 url에 접근할 수 없을 거라고 생각했습니다.

     

    어떻게 인증 완료 정보를 두 서비스가 공유할 수 있는 건가요??

     

  1. 또한 gateway도 이중화 구성이 가능한가요?.. userService를 2,3중화 한 것처럼 gateway도 여러 대의 인스턴스로 기동하면 eureka에서 다중 구성한 서버로 인식해주는 건가요??...

  2. 혹시 gateway에도 Spring Security를 적용시키는 경우도 있을까요?.. 권한 별 접근 제어를 구현하기 위해서는 해당 라이브러리를 사용해야 할 것 같아서요!

  3. 또한 gateway에서 커스텀 필터를 만들 때, apply 메소드의 return 타입이 GatewayFilter 로 되어있는데, Mono<Void> 타입으로 return을 해도 되는 건가요?... Mono<Void>는 mvc에서 return 타입이 void 인 것과 같은 의미 아닌가요?...

     

    열심히 강의해주셨는데 질문의 너무 많아 죄송합니다..ㅠ 답변 기다리겠습니다! 항상 감사드립니다!!

     

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2023. 11. 04. 00:11

안녕하세요 qpal1zm23님, 질문 주셔서 감사합니다! 여러 가지 질문에 대한 답변을 드리겠습니다.

  1. gateway와 user-service 사이에서 인증 정보를 공유하기 위해서는 세션 공유, 토큰 기반 인증 등의 방법을 사용할 수 있습니다. 간단한 방법으로는 JWT(Json Web Token)을 사용하여 gateway로부터 발급된 토큰을 user-service로 전달하여 인증 정보를 공유할 수 있습니다.

  2. gateway도 이중화 구성이 가능합니다. 여러 대의 gateway 인스턴스를 기동하고 해당 인스턴스들을 Eureka 서버에 등록하여 다중 구성된 서버로 인식할 수 있습니다.

  3. gateway에도 Spring Security를 적용시킬 수 있습니다. Spring Cloud Gateway는 일종의 필터 체인을 가지고 있어서 인증, 권한 등의 접근 제어를 구현할 수 있습니다.

  4. GatewayFilter의 apply 메소드의 반환 타입은 Mono이 맞습니다. Mono는 비동기 처리를 위해 사용되며, 반환 값이 없음을 의미합니다. 따라서 Mono를 반환하여도 문제가 없습니다.

답변이 도움이 되셨는지 확인 부탁드리며, 추가적인 질문이 있으시면 언제든지 주저하지 마시고 물어보세요. 즐거운 학습되시길 바랍니다! 감사합니다.