2024-08-02 MSA (Microservices Architecture) - 9

목표
- OAuth2와 JWT를 이용하여 실습한다.
실습 (1)
- Spring Cloud Gateway 실습 시 사용했던 프로젝트로 실습을 진행할 것이다.
- 강의 내용에 따라 의존성을 주입하고 auth 프로젝트를 생성하여 server 프로젝트의 Gradle에 추가한다.
- [그림 1]은 Access Token을 발행하는 주요 로직을 보여준다.
- Access Token을 발행할 때 Claim에 user_id로 사용자 정보를 넣고, 그 밖에 발행처, 발행 시각, 만료 시각, 서명을 위한 비밀키와 서명 알고리즘 정보가 필요하다.
[그림 1] - AuthService

- server 애플리케이션을 먼저 실행시킨 후 auth 애플리케이션을 실행시킨다.
- Eureka Server에 접속했을 때 포트 번호가 19095인 AUTH-SERVICE가 실행 중 (Status: UP)임을 확인할 수 있다.
[그림 2] - Eureka Server

- 이번엔 'localhost:19095/auth/signIn?user_id=aaa'에 GET 요청을 보낸 후 Access Token이 정상적으로 응답됐는지를 브라우저에서 확인할 것이다.
[그림 3] - Access Token 발행

- 해당 Access Token을 'jwt.io'에서 decode하면 [그림 4]와 같은 JSON 형태의 정보를 추출할 수 있다.
[그림 4] - Decode JWT

실습 (2)
- 이번엔 gateway 프로젝트에서 작업할 것이다.
- 강의 내용에 따라 auth의 Secret Key를 gateway 프로젝트에 복제하고 GlobalFilter 인터페이스의 구현 클래스를 정의한다.
- 포트 번호가 19093인 product 애플리케이션과 gateway 애플리케이션을 추가로 실행시킨 후 Postman에서 API 테스트를 진행한다.
[그림 5] - GET /auth/signIn?user_id=aaa

- [그림 5]에서 반환된 Access Token 앞에 "Bearer "을 붙여서 'Authorization' 헤더에 담아 '/product'에 GET 요청을 보낸다.
- API GATEWAY도 정상적으로 동작하고 있음을 확인할 수 있다.
[그림 6] - GET /product
