App Check를 사용하여 API 키 보호
Firebase 앱 체크는 합법적인 앱 이외의 소스에서 발생하는 트래픽을 차단하여 앱에서 Google Maps Platform으로의 호출을 보호합니다. Play Integrity와 같은 증명 제공업체의 토큰을 확인하여 이를 실행합니다. 앱을 앱 체크와 통합하면 악의적인 요청으로부터 보호할 수 있으므로 승인되지 않은 API 호출에 대한 요금이 청구되지 않습니다.
앱 체크가 나에게 적합한가요?
대부분의 경우 앱 체크를 사용하는 것이 좋지만 다음 경우에는 앱 체크가 필요하지 않거나 지원되지 않습니다.
- 원래 Places SDK를 사용하고 있습니다. App Check는 Places SDK (신규)에서만 지원됩니다.
- 비공개 또는 실험용 앱 앱에 공개적으로 액세스할 수 없는 경우 앱 체크는 필요하지 않습니다.
- 앱이 서버 간 전용으로 사용되는 경우 앱 체크는 필요하지 않습니다. 하지만 GMP와 통신하는 서버가 공개 클라이언트 (예: 모바일 앱)에서 사용되는 경우 GMP 대신 App Check를 사용하여 해당 서버를 보호하는 것이 좋습니다.
- 앱 체크에서 권장하는 증명 제공자는 증명 제공자가 손상되었거나 신뢰할 수 없다고 간주하는 기기에서 작동하지 않습니다. 이러한 기기를 지원해야 하는 경우 맞춤 증명 서비스를 배포할 수 있습니다. 자세한 내용은 안내를 참고하세요.
구현 단계 개요
앱을 App Check와 통합하는 단계는 대략 다음과 같습니다.
- 앱에 Firebase를 추가합니다.
- 앱 체크 라이브러리를 추가하고 초기화합니다.
- 토큰 제공업체를 추가합니다.
- 디버깅을 사용 설정합니다.
- 앱 요청을 모니터링하고 시정 조치를 결정합니다.
App Check와 통합하면 Firebase Console에서 백엔드 트래픽 측정항목을 확인할 수 있습니다. 이 측정항목은 유효한 앱 체크 토큰이 있는지 여부에 따라 요청을 분류하여 보여줍니다. 자세한 내용은 Firebase 앱 체크 문서를 참고하세요.
대부분의 요청이 합법적인 소스에서 발생하고 사용자가 앱 체크 구현이 포함된 앱의 최신 버전으로 업데이트했음을 확신할 수 있으면 시행을 사용 설정할 수 있습니다. 적용을 사용 설정하면 앱 체크에서 유효한 앱 체크 토큰이 없는 모든 트래픽을 거부합니다.
앱 체크 통합을 계획할 때의 고려사항
통합을 계획할 때 고려해야 할 사항은 다음과 같습니다.
권장되는 증명 제공업체인 Play Integrity의 표준 API 사용 등급에는 일일 호출 한도가 있습니다. 호출 한도에 관한 자세한 내용은 Google Play Integrity 개발자 문서의 설정 페이지를 참고하세요.
맞춤 증명 제공업체를 사용할 수도 있지만 이는 고급 사용 사례입니다. 자세한 내용은 커스텀 앱 체크 제공자 구현을 참고하세요.
-
앱 사용자는 시작 시 약간의 지연을 경험하게 됩니다. 하지만 그 후에는 주기적인 재증명이 백그라운드에서 발생하므로 사용자는 더 이상 지연을 경험하지 않아도 됩니다. 시작 시 정확한 지연 시간은 선택한 증명 제공업체에 따라 다릅니다.
앱 체크 토큰이 유효한 시간 (수명 또는 TTL)에 따라 재증명 빈도가 결정됩니다. 이 기간은 Firebase Console에서 구성할 수 있습니다. 재증명은 TTL의 약 절반이 경과하면 발생합니다. 자세한 내용은 증명 기관의 Firebase 문서를 참고하세요.
앱을 앱 체크와 통합
기본 요건
- 버전 4.1 이상의 Places SDK가 통합된 앱
- 앱의 SHA-256 지문입니다.
- 앱의 패키지 이름입니다.
- Cloud 콘솔에서 앱의 소유자여야 합니다.
- Cloud 콘솔의 앱 프로젝트 ID가 필요합니다.
1단계: 앱에 Firebase 추가
Firebase 개발자 문서의 안내에 따라 앱에 Firebase를 추가합니다.
2단계: 앱 체크 라이브러리 추가 및 앱 체크 초기화
기본 증명 제공자인 Play Integrity를 사용하는 방법에 관한 자세한 내용은 Android에서 Play Integrity로 앱 체크 사용 시작하기를 참고하세요.
- 아직 하지 않았다면 Places SDK를 앱에 통합하세요.
그런 다음 App Check 및 Places 클라이언트를 초기화합니다.
// Initialize App Check FirebaseApp.initializeApp(/*context=*/ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance()); // Initialize Places SDK Places.initializeWithNewPlacesApiEnabled(context, API_KEY); PlacesClient client = Places.createClient(context);.
3단계: 토큰 제공업체 추가
Places API를 초기화한 후 setPlacesAppCheckTokenProvider()
를 호출하여 PlacesAppCheckTokenProvider
를 설정합니다.
Places.initializeWithNewPlacesApiEnabled(context, API_KEY); Places.setPlacesAppCheckTokenProvider(new TokenProvider()); PlacesClient client = Places.createClient(context);.
다음은 토큰 가져오기 도구 인터페이스의 샘플 구현입니다.
/** Sample client implementation of App Check token fetcher interface. */ static class TokenProvider implements PlacesAppCheckTokenProvider { @Override public ListenableFuture<String> fetchAppCheckToken() { SettableFuture<String> future = SettableFuture.create(); FirebaseAppCheck.getInstance() .getAppCheckToken(false) .addOnSuccessListener( appCheckToken -> { future.set(appCheckToken.getToken()); }) .addOnFailureListener( ex -> { future.setException(ex); }); return future; } }
4단계: 디버깅 사용 설정 (선택사항)
로컬에서 앱을 개발 및 테스트하거나 지속적 통합 (CI) 환경에서 실행하려면 디버그 비밀을 사용하여 유효한 앱 체크 토큰을 가져오는 앱의 디버그 빌드를 만들면 됩니다. 이렇게 하면 디버그 빌드에서 실제 증명 제공업체를 사용하지 않아도 됩니다.
에뮬레이터 또는 테스트 기기에서 앱을 실행하려면 다음 단계를 따르세요.
build.gradle
파일에 앱 체크 라이브러리를 추가합니다.- 디버그 빌드에서 디버그 제공자 팩토리를 사용하도록 앱 체크를 구성합니다.
- 앱을 실행하면 로컬 디버그 토큰이 생성됩니다. 이 토큰을 Firebase Console에 추가합니다.
- 자세한 내용과 안내는 앱 체크 문서를 참고하세요.
CI 환경에서 앱을 실행하려면 다음 안내를 따르세요.
- Firebase Console에서 디버그 토큰을 만들고 CI 시스템의 보안 키 저장소에 추가합니다.
build.gradle
파일에 앱 체크 라이브러리를 추가합니다.- 디버그 토큰을 사용하도록 CI 빌드 변형을 구성합니다.
- 앱 체크 토큰이 필요한 테스트 클래스의 코드를
DebugAppCheckTestHelper
로 래핑합니다. - 자세한 내용과 안내는 앱 체크 문서를 참고하세요.
5단계: 앱 요청 모니터링 및 시정 조치 결정
시정 조치를 시작하기 전에 앱의 적법한 사용자가 방해받지 않도록 해야 합니다. 이렇게 하려면 앱 체크 측정항목 화면으로 이동하여 앱 트래픽 중 확인된 트래픽, 오래된 트래픽, 잘못된 트래픽의 비율을 확인하세요. 트래픽의 대부분이 인증되면 시행을 사용 설정할 수 있습니다.
자세한 내용과 안내는 Firebase 앱 체크 문서를 참고하세요.