보안의 중요성
- 마이크로서비스 아키텍처에서 보안은 핵심 요소입니다. 각 서비스가 독립적으로 배포되고 통신하는 구조에서는 데이터 보호, 인증, 권한 부여, 통신 암호화 등을 통해 시스템의 보안성을 확보해야 합니다.
OAuth2 개요
- OAuth2는 토큰 기반의 인증 및 권한 부여 프로토콜입니다.
- 클라이언트 애플리케이션이 리소스 소유자의 권한을 얻어 보호된 리소스에 접근할 수 있도록 합니다.
- 주요 역할:
- 리소스 소유자
- 클라이언트
- 리소스 서버
- 인증 서버
OAuth2의 주요 Grant Type
- Authorization Code Grant: 인증 코드를 통해 액세스 토큰을 얻는 방식
- Implicit Grant: 클라이언트 애플리케이션에서 직접 액세스 토큰을 얻는 방식
- Resource Owner Password Credentials Grant: 사용자 이름과 비밀번호로 액세스 토큰을 얻는 방식
- Client Credentials Grant: 클라이언트 애플리케이션이 자신의 자격 증명을 사용하여 액세스 토큰을 얻는 방식
JWT 개요
- JWT(JSON Web Token)는 JSON 형식의 자가 포함된 토큰으로, 클레임(claim)을 통해 사용자에 대한 정보를 전달합니다.
- 구성 요소: 헤더, 페이로드, 서명
- 주요 특징:
- 자가 포함: 토큰에 모든 정보 포함, 별도 상태 저장 불필요
- 간결성: 짧고 간결한 문자열로 URL, 헤더 등에 쉽게 포함 가능
- 서명 및 암호화: 데이터의 무결성과 인증 보장
실습 요약: 클라우드 게이트웨이의 JWT 인증 구성
Auth Service 구현
- 로그인 시 JWT 토큰을 발급받아 게이트웨이 호출 시 사용
AuthService에서 JWT를 생성하며, 클라이언트는 이를 AuthController를 통해 요청할 수 있음
- JWT 생성 시 사용자 ID, 역할, 만료 시간 등을 포함
Cloud Gateway에서 JWT 인증
- 게이트웨이에 JWT 인증 필터를 추가하여 특정 경로를 제외한 모든 요청에서 JWT 토큰을 검증
- 토큰이 유효하지 않으면 401 Unauthorized 에러 발생
- 인증된 토큰으로 요청 시 정상적으로 서비스 접근 가능
주요 학습 내용
- 보안 필터 구성:
LocalJwtAuthenticationFilter를 사용해 게이트웨이에서 JWT 토큰을 검증
- 토큰 검증 로직: 토큰이 유효한지, 서명이 올바른지 확인
- 실습 순서: 유레카 서버, 게이트웨이, 인증 서비스, 상품 서비스 순으로 어플리케이션 실행
- 클라이언트 요청: 토큰을 이용한 클라이언트 요청이 어떻게 처리되는지 실습
정리
이번 학습을 통해 OAuth2와 JWT를 활용한 마이크로서비스 보안 구성의 중요성을 이해하고, 실제 애플리케이션에서 이를 구현하는 방법을 익혔습니다. 특히, 게이트웨이에서 JWT를 활용한 인증 방식을 통해 클라이언트 요청을 안전하게 처리할 수 있는 방법을 습득했습니다.