내 스택 보안: Asgardeo, Ballerina, 및 Choreo 통합 기능과 경험

발행: (2025년 12월 5일 오전 01:49 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

소개: 보안 마이크로서비스 게이트웨이 구축

Secure Gateway 프로젝트—React 프론트엔드Ballerina 백엔드WSO2 Choreo에 통합—에서는 WSO2 Asgardeo를 핵심 Identity Provider(IDP)로 선택했습니다. 목표는 OAuth 2.0 및 OpenID Connect(OIDC)의 복잡성을 원활히 처리하는 최신 클라우드‑네이티브 CIAM 솔루션을 활용하는 것이었습니다.

이 글에서는 제가 활용한 Asgardeo의 구체적인 기능들을 소개하고, 이를 보안 마이크로서비스 아키텍처에 직접 통합한 경험을 공유합니다.

아키텍처 한눈에 보기

우리의 간단한 스택은 계층형 보안을 제공합니다:

구성 요소기술보안 역할
프론트엔드React (Vite)OIDC 흐름을 시작하고 사용자 세션을 관리합니다.
백엔드 APIBallerinaJWT 검증기로 보호된 비즈니스 로직을 포함합니다.
API 게이트웨이Choreo Connect첫 번째 보안 레이어; 라우팅 전에 JWT를 검증합니다.
IDPAsgardeo인증된 **JSON Web Token (JWT)**을 발급합니다.

기능 1: 원활한 SPA 설정 및 PKCE

나의 경험: 직관적이고 안전한 구성

애플리케이션을 Single Page Application (SPA) 로 정의했습니다. 이 선택만으로도 필요한 보안 프로토콜이 자동으로 설정되었습니다: PKCE(Proof Key for Code Exchange)를 사용한 Authorization Code 흐름.

  • PKCE는 필수: 클라이언트 시크릿을 안전하게 저장할 수 없는 SPA와 같은 퍼블릭 클라이언트에서는 코드 가로채기 공격을 방지합니다. Asgardeo는 SPA 템플릿을 선택하면 자동으로 PKCE를 강제 적용해, 별도 설정 없이 즉시 보안을 확보합니다.
  • 리다이렉트 관리: Authorized Redirect URLs(예: https:///callback)를 설정하는 과정이 간단하고 명확해, 인증 흐름이 중단되는 상황을 방지할 수 있습니다.

기능 2: React SDK (@asgardeo/auth-react)

나의 경험: 리액티브 앱에서 토큰 신뢰성 확보

공식 Asgardeo React SDK는 로그인/로그아웃 통합과 세션 관리를 크게 단순화했습니다.

  • useAuthContext: 사용자의 인증 상태(isAuthenticated)와 세션 데이터를 즉시 제공합니다.
  • 토큰 신뢰성: 접근 토큰을 리액티브 상태에 의존하면 레이스 컨디션이 발생할 수 있습니다. SDK의 비동기 getAccessToken() 메서드는 API 호출 직전에 최종 유효 토큰을 안정적으로 가져와, Authorization: Bearer <token> 헤더가 항상 최신임을 보장합니다.
// API 호출 직전에 토큰을 안전하게 가져오는 방법
const fetchData = async () => {
  const token = await getAccessToken();
  const apiResponse = await fetch(apiUrl, {
    headers: {
      Authorization: `Bearer ${token}`
    }
  });
  // ... 응답 처리
};

기능 3: JWT 액세스 토큰 생성 및 검증

나의 경험: Issuer 충돌 발견

Ballerina API는 JWT 검증이 필요했습니다. Asgardeo는 유효한 JWT를 발급했지만, iss 클레임이 문제를 일으켰습니다:

  • 문제 클레임: Issuer(iss) 클레임에 전체 토큰 엔드포인트 URL(https://.../oauth2/token)이 포함되어 있었습니다.
  • 표준 기대값: 초기 검증기는 기본 URL(https://.../t/maheshadinushan)만을 기대하도록 설정돼 있었습니다.

실제 토큰 페이로드를 확인해 보니 불일치가 드러났습니다. 따라서 API 게이트웨이(Choreo)와 Ballerina 서비스 모두 전체 엔드포인트 URL(.../oauth2/token)을 신뢰하도록 구성해야 했습니다. 이 조정으로 JWT 검증기 교착 상태가 해결되었습니다.

JWT 토큰 구조 이미지

Back to Blog

관련 글

더 보기 »