Crypto DPoP
Expo Crypto DPoP
RFC 9449 기반 DPoP(Demonstrating Proof-of-Possession) 인증 모듈
Expo Crypto DPoP
expo-crypto-dpop은 RFC 9449 표준을 구현한 DPoP(Demonstrating Proof-of-Possession) 인증 모듈입니다. EC P-256 키 쌍을 안전하게 생성·보관하고, OAuth 2.0 액세스 토큰에 암호학적으로 바인딩된 DPoP 증명 JWT를 생성합니다.
지원 플랫폼
| 플랫폼 | 지원 여부 |
|---|---|
| iOS | ✅ |
| Android | ✅ |
| Web | ❌ |
DPoP란?
DPoP(Demonstrating Proof-of-Possession)는 RFC 9449에서 정의된 OAuth 2.0 확장 메커니즘입니다. 기존 Bearer 토큰 방식의 한계를 극복하기 위해 고안되었으며, 클라이언트가 특정 공개/개인 키 쌍을 소유하고 있음을 매 API 요청마다 증명합니다.
Bearer 토큰의 문제점:
- 토큰이 탈취되면 누구든 해당 토큰으로 API를 호출 가능
- 토큰 자체에 클라이언트 신원 정보가 없음
DPoP의 해결책:
- 요청마다 개인 키로 서명된 DPoP 증명 JWT를 함께 전송
- 서버는 공개 키로 서명을 검증하여 정당한 클라이언트임을 확인
- 토큰이 탈취되어도 개인 키 없이는 사용 불가
주요 기능
- EC P-256 키 쌍 생성: 네이티브 암호화 라이브러리를 사용한 안전한 키 생성
- DPoP 증명 JWT 생성: RFC 9449 Section 4.2 준수 (ES256 알고리즘)
- 보안 키 저장:
expo-secure-store를 통한 iOS Keychain / Android Keystore 저장 - 앱 재설치 감지: iOS Keychain 영속성 문제 자동 처리
- Nonce 지원: 서버 제공
DPoP-Nonce처리 - 토큰 바인딩:
ath클레임을 통한 액세스 토큰 바인딩
아키텍처 개요
ensureKeyPair()는 앱 재설치 시 구 키를 자동으로 삭제하고 새 키를 생성합니다. 매 요청마다 createProof()를 호출하는 것이 권장 패턴입니다.