작성
·
418
·
수정됨
0
안녕하세요 선생님 강의 잘 듣고 있습니다.
강의 수강 중 질문이 생겨서요!
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에 접근할 수 없을 거라고 생각했습니다.
어떻게 인증 완료 정보를 두 서비스가 공유할 수 있는 건가요??
또한 gateway도 이중화 구성이 가능한가요?.. userService를 2,3중화 한 것처럼 gateway도 여러 대의 인스턴스로 기동하면 eureka에서 다중 구성한 서버로 인식해주는 건가요??...
혹시 gateway에도 Spring Security를 적용시키는 경우도 있을까요?.. 권한 별 접근 제어를 구현하기 위해서는 해당 라이브러리를 사용해야 할 것 같아서요!
또한 gateway에서 커스텀 필터를 만들 때, apply 메소드의 return 타입이 GatewayFilter 로 되어있는데, Mono<Void> 타입으로 return을 해도 되는 건가요?... Mono<Void>는 mvc에서 return 타입이 void 인 것과 같은 의미 아닌가요?...
열심히 강의해주셨는데 질문의 너무 많아 죄송합니다..ㅠ 답변 기다리겠습니다! 항상 감사드립니다!!
답변 1
0
안녕하세요 qpal1zm23님, 질문 주셔서 감사합니다! 여러 가지 질문에 대한 답변을 드리겠습니다.
gateway와 user-service 사이에서 인증 정보를 공유하기 위해서는 세션 공유, 토큰 기반 인증 등의 방법을 사용할 수 있습니다. 간단한 방법으로는 JWT(Json Web Token)을 사용하여 gateway로부터 발급된 토큰을 user-service로 전달하여 인증 정보를 공유할 수 있습니다.
gateway도 이중화 구성이 가능합니다. 여러 대의 gateway 인스턴스를 기동하고 해당 인스턴스들을 Eureka 서버에 등록하여 다중 구성된 서버로 인식할 수 있습니다.
gateway에도 Spring Security를 적용시킬 수 있습니다. Spring Cloud Gateway는 일종의 필터 체인을 가지고 있어서 인증, 권한 등의 접근 제어를 구현할 수 있습니다.
GatewayFilter의 apply 메소드의 반환 타입은 Mono
답변이 도움이 되셨는지 확인 부탁드리며, 추가적인 질문이 있으시면 언제든지 주저하지 마시고 물어보세요. 즐거운 학습되시길 바랍니다! 감사합니다.