#인증 & 보안
버전: 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);#워크플로우
.then()으로 Axon 파이프라인에 Guard 노드를 추가하여 HTTP 보안을 다층으로 구성합니다.- JWT/OAuth/API-key 백엔드에 맞는
IamVerifier를 구현합니다. Axon::with_iam()으로IamPolicy를 연결하여 경계를 자동 검증합니다.- 후속 Transition에서 Bus의
IamIdentity를 읽어 사용자 컨텍스트를 확인합니다. - 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를 포함하는 검증된 아이덴티티 |