#인증 & 보안

버전: 0.33.0 최종 업데이트: 2026-03-15 적용 대상: ranvier-std, ranvier-core 카테고리: Deep Dives


숨겨진 미들웨어를 가시적이고 추적 가능한 Guard Transition 노드와 IAM 경계 검증으로 대체합니다.

#Guard 노드 (ranvier-std)

Guard 설명
CorsGuard 허용된 출처에 대해 요청 출처를 검증합니다. Bus에서 RequestOrigin을 읽고, CorsHeaders를 기록합니다.
RateLimitGuard 클라이언트별 토큰 버킷 속도 제한. Bus에서 ClientIdentity를 읽습니다.
SecurityHeadersGuard HSTS, CSP, X-Frame-Options, X-Content-Type-Options를 SecurityHeaders로 Bus에 주입합니다.
IpFilterGuard 허용 목록 또는 차단 목록 IP 필터링. Bus에서 ClientIp를 읽습니다.

모든 Guard는 Transition<T, T>를 구현합니다 -- 성공 시 입력을 통과시키고, 거부 시 Fault를 반환합니다.


#IAM 프레임워크 (ranvier-core::iam)

  • IamVerifier 트레이트: 인증 백엔드에 대해 verify(token) -> Result<IamIdentity, IamError>를 구현합니다.
  • IamPolicy: None, RequireIdentity, RequireRole(String), RequireClaims(Vec<String>).
  • Axon::with_iam(policy, verifier): 모든 Transition 실행 전 자동 경계 검증.
  • IamIdentity: Subject, roles, claims -- 다운스트림 접근을 위해 Bus에 삽입됩니다.
  • IamToken: Axon IAM 경계에서 읽는 Bus 주입 가능한 Bearer 토큰.

#세션 패턴

  • 세션 생성 및 검증을 Transition 노드로 처리합니다 (미들웨어가 아님).
  • Bus 주입을 통한 쿠키 기반 또는 헤더 기반 토큰 추출.
  • 만료 및 정리 로직을 명시적 Transition 단계로 처리합니다.

#빠른 시작

// Guard pipeline
Axon::new("Guarded API")
    .then(CorsGuard::new(CorsConfig::default()))
    .then(RateLimitGuard::new(100, 60_000))
    .then(SecurityHeadersGuard::new(SecurityPolicy::new()))
    .then(IpFilterGuard::allow_list(["127.0.0.1"]))
    .then(BusinessLogic);

#워크플로우

  1. .then()으로 Axon 파이프라인에 Guard 노드를 추가하여 계층화된 HTTP 보안을 구현합니다.
  2. JWT/OAuth/API-key 백엔드에 대해 IamVerifier를 구현합니다.
  3. Axon::with_iam()을 통해 IamPolicy를 연결하여 자동 경계 검증을 수행합니다.
  4. 다운스트림 Transition에서 Bus의 IamIdentity를 읽어 사용자 컨텍스트를 확인합니다.
  5. HTTP 어댑터 레이어에서 RequestOrigin, ClientIp, ClientIdentity를 주입합니다.

#주요 타입

타입 설명
CorsGuard<T> Transition 노드로서의 CORS 출처 검증
RateLimitGuard<T> ClientIdentity별 토큰 버킷 속도 제한기
IpFilterGuard<T> IP 허용 목록 또는 차단 목록 필터
IamPolicy 열거형: None / RequireIdentity / RequireRole / RequireClaims
IamVerifier 인증 백엔드를 위한 트레이트 (JWT, OAuth, API key)
IamIdentity subject, roles, claims를 포함하는 검증된 아이덴티티