피드로 돌아가기
Signed token between two PWAs: HMAC-SHA256 with no backend
Dev.toDev.to
Security

Backend 없는 Web Crypto API 기반 PWA 간 HMAC-SHA256 인증 구현

Signed token between two PWAs: HMAC-SHA256 with no backend

Andrea Roversi2026년 6월 28일7intermediate

Context

서로 다른 Firebase 프로젝트로 운영되는 두 PWA 간에 사용자 identity 공유가 필요한 상황. Shared Database나 통합 Authentication 인프라가 없는 제약 조건으로 인해 최소 비용의 신원 전달 체계 구축이 요구됨.

Technical Solution

  • Web Crypto API를 활용하여 브라우저 네이티브 환경에서 HMAC-SHA256 서명 생성 및 검증 로직 설계
  • JWT 구조를 벤치마킹하여 signature.payload 형태의 토큰을 생성하고 URL Query Parameter를 통해 상태 전달
  • Shared Secret을 양측 클라이언트에 공유하여 별도의 서버 통신 없이 서명 일치 여부로 데이터 무결성 확보
  • Token TTL을 5분으로 제한하여 탈취된 토큰의 유효 기간을 최소화하는 보안 장치 마련
  • history.replaceState를 통한 URL 파라미터 즉시 제거로 브라우저 히스토리에 토큰 노출 방지
  • sessionStorage 및 CustomEvent를 활용해 검증된 사용자 정보를 애플리케이션 전역 상태로 전파

1. Web Crypto API의 `importKey`와 `sign`/`verify` 함수를 통한 네이티브 HMAC 구현 검토

2. 민감 정보가 포함되지 않은 내부 툴의 경우, 클라이언트 사이드 Shared Secret 활용 가능 여부 판단

3. URL 기반 토큰 전달 시 `history.replaceState`를 통한 즉각적인 흔적 제거 적용

4. 클라이언트 사이드 토큰의 짧은 TTL(Time-To-Live) 설정으로 리플레이 공격 위험 완화

원문 읽기