맞춤형 App Check 공급자 구현

App Check에는 Apple 플랫폼의 DeviceCheck 및 App Attest, Android의 Play Integrity 및 SafetyNet, 웹 앱의 reCAPTCHA v3 및 reCAPTCHA Enterprise와 같은 여러 제공업체에 대한 지원이 내장되어 있습니다. ( 개요 ). 이들은 대부분의 개발자의 요구 사항을 충족해야 하는 잘 알려진 공급자입니다. 그러나 사용자 지정 App Check 공급자를 구현할 수도 있습니다. 다음과 같은 경우 사용자 지정 공급자를 사용해야 합니다.

  • 기본 제공 공급자 이외의 공급자를 사용하려고 합니다.

  • 지원되지 않는 방식으로 기본 제공 공급자를 사용하려고 합니다.

  • Apple, Android 및 웹 이외의 플랫폼을 사용하여 장치를 확인하려고 합니다. 예를 들어 데스크톱 OS 또는 사물 인터넷 장치에 대한 앱 검사 공급자를 만들 수 있습니다.

  • 모든 플랫폼에서 고유한 검증 기술을 구현하려고 합니다.

개요

맞춤 App Check 제공자를 구현하려면 Node.js Firebase Admin SDK 를 실행할 수 있는 안전한 백엔드 환경이 필요합니다. Cloud Functions, Cloud Run 과 같은 컨테이너 플랫폼 또는 자체 서버가 될 수 있습니다.

이 환경에서 앱 클라이언트로부터 진위 증명을 수신하고 진위 증명이 진위 평가를 통과하면 App Check 토큰을 반환하는 네트워크 액세스 가능 서비스를 제공합니다. 진위 증명으로 사용하는 특정 지표는 사용 중인 타사 공급자 또는 사용자 정의 논리를 구현하는 경우 자체 발명의 지표에 따라 다릅니다.

일반적으로 이 서비스를 REST 또는 gRPC 끝점으로 노출하지만 이 세부 정보는 사용자에게 달려 있습니다.

토큰 획득 엔드포인트 생성

  1. Admin SDK를 설치하고 초기화합니다 .

  2. 클라이언트에서 인증 데이터를 수신할 수 있는 네트워크 액세스 가능한 끝점을 만듭니다. 예를 들어 Cloud Functions 사용:

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onCall((authenticityData, context) => {
      // ...
    });
    
  3. 진위 데이터를 평가하는 끝점 논리에 추가합니다. 이것은 직접 작성해야 하는 사용자 지정 App Check 공급자의 핵심 논리입니다.

  4. 클라이언트가 인증된 것으로 판단되면 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 오류 반환).

  5. 선택 사항 : AppCheckTokenOptions 객체를 createToken() 에 전달하여 사용자 지정 공급자가 발급한 App Check 토큰의 TTL(수명)을 설정합니다. TTL을 30분에서 7일 사이의 값으로 설정할 수 있습니다. 이 값을 설정할 때 다음 절충 사항에 유의하십시오.

    • 보안: TTL이 짧을수록 유출되거나 가로채어진 토큰이 공격자가 남용할 수 있는 창을 줄이므로 더 강력한 보안을 제공합니다.
    • 성능: TTL이 짧을수록 앱이 더 자주 증명을 수행합니다. 앱 증명 프로세스는 수행될 때마다 네트워크 요청에 대기 시간을 추가하므로 짧은 TTL이 앱 성능에 영향을 줄 수 있습니다.

    1시간의 기본 TTL은 대부분의 앱에 적합합니다.

다음 단계

이제 사용자 지정 공급자의 서버 측 논리를 구현 했으므로 Apple , Android 클라이언트에서 이를 사용하는 방법을 알아봅니다.