#인증 & 보안
버전: 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);#워크플로우
.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를 포함하는 검증된 아이덴티티 |