MSA 서비스를 분리한 후에는 어떻게 통합(상호연동, 객체참조)할 것인가?
→ API Gateway
역할
서비스 라우팅
CORS(교차출처) 허용
ACL 적용하여 잘못된 호출 필터링
기타 보안정책 적용(ex. Prevent DDOS)
로드벨런싱
관련도구
Proxy, Kube Gateway Service, [Zuul, Ribbon]
→ Service Registry+Service Discovery
역할
서비스 Discovery가 가능하도록 서비스 경로 저장
관련도구
Eureka, Kube DNS Service, 일반DNS서비스, Feign Client
→ URI Path-based Call (Req-Res)
역할
동기호출
관련도구
REST API
→ Message Queue Call (Pub-Sub)
역할
비동기호출(Loosly Coupled)
관련도구
kafka, Stream, 기타 MQ 플랫폼
서비스 분리에 따른 통합 인증은 어떻게 할 것인가?
→ 토큰기반 인증/인가
역할
Token 기반의 사용자 세션관리. 범용프로토콜을 통한 인증/인가 정보 통신
관련도구
JWT, Oauth2.0, SAML3.0(데이터형식으로 XML사용)
Json Web Token에 대해서
- Header는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있습니다. 첫째는 토큰의 유형 (JWT)을 나타내고, 두 번째는 HMAC, SHA256 또는 RSA와 같은 해시 알고리즘을 나타내는 부분입니다.
- Payload는 토큰에 담을 클레임(claim) 정보를 포함하고 있습니다. Payload 에 담는 정보의 한 ‘조각’ 을 클레임이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.
- Signature는 secret key를 포함하여 암호화되어 있습니다. 서명을 통해서 서버는 이 요청이 유효한지 평가합니다.
※ 여기서 Signature를 어떤 알고리즘을 사용할 것인지 고민하게 됩니다. 대표적으로 RSA(공개키 기반구조) 방식과 HMAC(해시를 이용한 메시지다이제스트) 방식이 주류인것 같습니다. 각 암호화 알고리즘은 장단점이 있고 제약사항이 다릅니다. 두 알고리즘이 가장 다른점은 RSA는 공개키로 복호화에 필요한 개인키를 수학적으로 도출하는 방식이며, MAC은 Key를 사전에 공유해야 합니다. (이 논쟁을 깊이 들어가면 포스팅 목적에서 벗어나므로 여기까지..)
JWT를 사용함으로써 얻을 수 있는
장점
- URL 파라미터와 헤더로 사용(범용프로토콜 사용)
- 수평 스케일이 용이
- 디버깅 및 관리가 용이
- 내장된 만료
- 관련 오픈소스 많음
단점
- 토큰은 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없습니다.
- 더 많은 필드가 추가되면 토큰이 커질 수 있습니다.
- 비상태 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있습니다.
- Payload 부분이 그냥 Encoding된것이므로 정보가 쉽게 노출될 수 있습니다 → 노출자체가 치명적인것은 아님. 그러니 노출해도 괜찮은 정보만 JSON으로 주고받을것
OAuth2.0 이란?
위의 JWT라는 Token 기반 JSON 타입의 데이터로 인증/인가를 수행하는 개념을 프로토콜(규약)으로 정의한 것이다.
규약으로 만들면서 Third Party끼리도 인증 방식과 인증시 주고받는 데이터가 통일되었다고 보면됨
OAuth는 단순 인가를 넘어 Role과 Grant 개념을 추가한것이 특징이다. 이 부분은 상당히 흥미로운 부분인데, 서버측의 리소스 보안을 '후차적인 프로그래밍 방식' 보다는 'Token으로 선처리'하겠다는 뜻이다. 프로그래밍 방식의 인가처리로 발생할 수 있는 누수현상을 방지하고 생산성이 향상된다.
다양한 Parameter를 활용하여 추가적으로 필요한 기능을 사용할 수 있다.
관련링크 : https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml
OAuth Parameters
scope authorization request, authorization response, token request, token response IETF [RFC6749]
www.iana.org
'Programming > MSA' 카테고리의 다른 글
CQRS 패턴이란 (0) | 2022.07.06 |
---|---|
MSA에 대한 기본개념 - 5. 회복성 (0) | 2022.06.12 |
MSA에 대한 기본개념 - 3. Domain Driven Design 으로 가는 여정 (0) | 2022.06.10 |
MSA에 대한 기본개념 - 2. 동기 비동기 호출 (0) | 2022.06.09 |
MSA에 대한 기본개념 - 1. Legacy에서 MSA로 진화하는 여정 (0) | 2022.06.08 |