강의

멘토링

커뮤니티

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

IThinkSo님의 프로필 이미지
IThinkSo

작성한 질문수

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

서비스 회원 인증

해결된 질문

작성

·

251

0

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

사용자가 로그인을 하게 된다면 user service에서 토큰을 줍니다.

앞으로 사용자는 apigateway에 계속 이 토큰을 전달해서 자신이 로그인한 사용자라는걸 인증합니다.

여기서 궁금한 점이 있는데..

order-service를 이용하려면 사용자의 UUID가 필요합니다. 수업에선 Postman을 이용해서 url에 직접 UUID를 적어줬는데, 실제 서비스에는 어떻게 전달하나요?

 

제가 생각해본 전달 방법은..

1. 사용자 토큰에 UUID를 넣어서 발급 후, 서비스 호출시  apigateway에서 사용자 토큰을 검증 후 뽑아낸 UUID를 이용해 order-service에 전달해준다. (이 경우 apigateway에서 뽑아낸 정보를 order-service에는 어떻게 전달해 줄 수 있나요?)

 

2. 무조건 User-service를 걸치게 만들어, apigateway -> user-service -> order-service를 호출하도록 한다. (하지만 이 경우에도 apigateway에서 user-service로 사용자 정보를 넘겨주어야 합니다.)

 

3. 사용자 검증을 각 서비스별로 만들어서 토큰에 포함된 정보를 직접 추출해낸다.

답변 1

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다. 

인증에 관련된 문제는 다양한 방법으로 해결할 수 있다고 생각됩니다. 

우선 강의에서는 order-service에서의 인증은 생략하였습니다. 다만 order-service에 직접 액세스하여 어떠한 기능을 사용하게 하는 것 보다는 user-service를 통해 주문을 하고 주문 내역을 확인해야 합니다. user-service에서 발행된 인증 토큰이 없으면, order-service를 사용하지 못하도록 하고, 단순 상품에 대한 조회의 상품 서비스(category-service)를 통해 처리하면 좋을 것 같습니다. 

모든 사용자의 요청은 apigateway-service를 거치기 때문에, 사용자는 로그인 후 얻은 인증토큰을 모든 서비스 요청 시 사용해야 합니다. user-service 및 order-service에서 apigateway-service를 통해 전달 된 request의 header를 확인하여 인증에 관련된 토큰 정보를 확인하거나, 인증 토큰 자체를 browser의 storage에 저장하여 사용할 수 있습니다. 인증토큰을 헤더에 포함시킬 지, 로컬스토리지나 세션스토리지에 저장할 지, 외부 스토리지에 저장해서 사용할지는 서비스의 규모 및 성격에 따라 분리할 수 있을 것 같습니다.

감사합니다. 

IThinkSo님의 프로필 이미지
IThinkSo

작성한 질문수

질문하기