App Check에는 Apple 플랫폼의 DeviceCheck 및 App Attest, Android의 Play Integrity, 웹 앱의 reCAPTCHA Enterprise 등 여러 제공자가 기본적으로 지원됩니다 (개요). 이들은 잘 알려진 제공업체로서 대부분의 개발자의 요구사항을 충족할 것입니다. 그러나 자체 커스텀 App Check 제공자를 구현할 수도 있습니다. 다음과 같은 경우 커스텀 제공자를 사용해야 합니다.
기본 제공자 이외의 다른 제공자를 사용하려고 합니다.
지원되지 않는 방식으로 기본 제공자를 사용하려고 합니다.
Apple, Android, 웹 이외의 플랫폼을 사용하여 기기를 인증하려고 합니다. 예를 들어 데스크톱 OS 또는 사물 인터넷 기기를 위한 App Check 제공자를 만들 수 있습니다.
모든 플랫폼에서 자체 인증 기법을 구현하려고 합니다.
개요
커스텀 App Check 제공자를 구현하려면 Node.js Firebase Admin SDK를 실행할 수 있는 보안 백엔드 환경이 필요합니다. Cloud Functions, Cloud Run과 같은 컨테이너 플랫폼 또는 자체 서버일 수 있습니다.
이 환경에서 앱 클라이언트로부터 신뢰성 증명을 수신하고 신뢰성 증명이 통과되면 App Check 토큰을 반환하는 네트워크에 액세스 가능한 서비스를 제공합니다. 신뢰성 증명으로 사용하는 특정 표시기는 사용 중인 타사 공급업체 또는 자체 개발 표시기(커스텀 로직을 구현하는 경우)에 따라 달라집니다.
일반적으로 이 서비스를 REST 또는 gRPC 엔드포인트로 노출하지만, 세부정보는 직접 결정합니다.
토큰 획득 엔드포인트 만들기
클라이언트로부터 인증 데이터를 수신할 수 있으며 네트워크에 액세스할 수 있는 엔드포인트를 만듭니다. 예를 들어 다음과 같이 Cloud Functions을 사용합니다.
// Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken exports.fetchAppCheckToken = functions.https.onRequest((request, response) => { // ... });
신뢰성 데이터를 평가하는 엔드포인트 로직에 추가합니다. 이는 커스텀 App Check 제공자의 핵심 로직이며, 개발자가 직접 작성해야 합니다.
클라이언트를 신뢰할 수 있다고 판단하면 Admin SDK를 사용하여 App Check 토큰을 발급하고 클라이언트에 토큰과 만료 시간을 반환합니다.
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()
에 전달하여 커스텀 제공자에서 발급한 App Check 토큰의 TTL(수명)을 설정합니다. TTL은 30분에서 7일 사이의 값으로 설정할 수 있습니다. 이 값을 설정할 때는 다음 장단점을 고려하세요.- 보안: TTL이 짧을수록 유출되거나 가로채인 토큰이 공격자에 의해 악용될 수 있는 기간이 줄어들므로 보안이 강화됩니다.
- 성능: TTL이 짧을수록 앱에서 증명을 더 자주 수행합니다. 앱 증명 프로세스는 실행될 때마다 네트워크 요청에 지연 시간이 추가되므로 짧은 TTL은 앱 성능에 영향을 줄 수 있습니다.
대부분의 앱에 기본 TTL인 1시간이 적합합니다.
다음 단계
이제 커스텀 제공자의 서버 측 로직을 구현했으므로 Apple, Android, 웹 클라이언트에서 커스텀 제공자를 사용하는 방법을 알아보세요.