앱 체크에는 Apple 플랫폼의 DeviceCheck 및 App Attest, Android의 Play Integrity 및 SafetyNet, 웹 앱의 reCAPTCHA v3 및 reCAPTCHA Enterprise 등 여러 제공자가 기본적으로 지원됩니다(미리보기) 대부분의 개발자 요구를 충족하는 잘 알려진 제공자입니다. 그러나 자체 커스텀 앱 체크 제공자를 구현할 수도 있습니다. 다음과 같은 경우 커스텀 제공자를 사용해야 합니다.
기본 제공자 이외의 다른 제공자를 사용하려고 합니다.
지원되지 않는 방식으로 기본 제공자를 사용하려고 합니다.
Apple, Android, 웹 이외의 플랫폼을 사용하여 기기를 인증하려고 합니다. 예를 들어 데스크톱 OS 또는 사물 인터넷 기기를 위한 앱 체크 제공자를 만들 수 있습니다.
모든 플랫폼에서 자체 인증 기법을 구현하려고 합니다.
개요
커스텀 앱 체크 제공자를 구현하려면 Node.js Firebase Admin SDK를 실행할 수 있는 보안 백엔드 환경이 필요합니다. Cloud Functions, Cloud Run과 같은 컨테이너 플랫폼 또는 자체 서버일 수 있습니다.
이 환경에서 앱 클라이언트로부터 신뢰성 증명을 수신하고 신뢰성 증명이 통과되면 앱 체크 토큰을 반환하는 네트워크에 액세스 가능한 서비스를 제공합니다. 신뢰성 증명으로 사용하는 특정 표시기는 사용 중인 타사 공급업체 또는 자체 개발 표시기(커스텀 로직을 구현하는 경우)에 따라 달라집니다.
일반적으로 이 서비스를 REST 또는 gRPC 엔드포인트로 노출하지만, 세부정보는 직접 결정합니다.
토큰 획득 엔드포인트 만들기
클라이언트로부터 인증 데이터를 수신할 수 있으며 네트워크에 액세스할 수 있는 엔드포인트를 만듭니다. 예를 들어 Cloud Functions를 사용하는 경우 다음과 같습니다.
// Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken exports.fetchAppCheckToken = functions.https.onCall((authenticityData, context) => { // ... });
신뢰성 데이터를 평가하는 엔드포인트 로직에 추가합니다. 이는 커스텀 앱 체크 제공자의 핵심 로직이며, 개발자가 직접 작성해야 합니다.
클라이언트를 신뢰할 수 있다고 판단하면 Admin SDK를 사용하여 앱 체크 토큰을 발급하고 클라이언트에 토큰과 만료 시간을 반환합니다.
const admin = require('firebase-admin'); admin.initializeApp(); // ... admin.appCheck().createToken(appId) .then(function (appCheckToken) { // Token expires in an hour. const expiresAt = Math.floor(Date.now() / 1000) + 60 * 60; // Return appCheckToken and expiresAt to the client. }) .catch(function (err) { console.error('Unable to create App Check token.'); console.error(err); });
클라이언트의 신뢰성을 확인할 수 없는 경우 오류를 반환합니다(예: HTTP 403 오류 반환).
선택사항:
AppCheckTokenOptions
객체를createToken()
에 전달하여 커스텀 제공자에서 발급한 앱 체크 토큰의 TTL(수명)을 설정합니다. TTL은 30분에서 7일 사이의 값으로 설정할 수 있습니다. 이 값을 설정할 때는 다음 장단점을 고려하세요.- 보안: 유출되거나 가로채진 토큰이 공격자에 의해 악용될 수 있는 기간을 줄이기 때문에 TTL이 짧을수록 강력한 보안을 제공합니다.
- 성능: TTL이 짧을수록 앱에서 증명을 더 자주 수행합니다. 앱 증명 프로세스는 실행될 때마다 네트워크 요청에 지연 시간이 추가되므로 짧은 TTL은 앱 성능에 영향을 줄 수 있습니다.
대부분의 앱에 기본 TTL인 1시간이 적합합니다.
다음 단계
이제 커스텀 제공자의 서버 측 로직을 구현했으므로 Apple, Android, 웹 클라이언트에서 커스텀 제공자를 사용하는 방법을 알아보세요.