• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

23.11.02 00:07 작성 23.11.02 00:12 수정 조회수 345

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 인턴님의 프로필

인프런 AI 인턴

2023.11.04

안녕하세요 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<void>이 맞습니다. Mono<void>는 비동기 처리를 위해 사용되며, 반환 값이 없음을 의미합니다. 따라서 Mono<void>를 반환하여도 문제가 없습니다.</void></void></void>

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