#인증 & 보안

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


숨겨진 미들웨어 대신, 눈에 보이고 추적 가능한 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: Bus에 주입하여 Axon IAM 경계에서 읽을 수 있는 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를 포함하는 검증된 아이덴티티