커스텀 앱 체크 제공자 구현

앱 체크에는 Apple 플랫폼의 DeviceCheck 및 App Attest, Android의 Play Integrity 및 SafetyNet, 웹 앱의 reCAPTCHA Enterprise 등 여러 제공자가 기본적으로 지원됩니다(개요). 대부분의 개발자 요구를 충족하는 잘 알려진 제공자입니다. 그러나 자체 커스텀 앱 체크 제공자를 구현할 수도 있습니다. 다음과 같은 경우 커스텀 제공자를 사용해야 합니다.

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

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

  • Apple, Android, 웹 이외의 플랫폼을 사용하여 기기를 인증하려고 합니다. 예를 들어 데스크톱 OS 또는 사물 인터넷 기기를 위한 앱 체크 제공자를 만들 수 있습니다.

  • 모든 플랫폼에서 자체 인증 기법을 구현하려고 합니다.

개요

커스텀 앱 체크 제공자를 구현하려면 Node.js Firebase Admin SDK를 실행할 수 있는 보안 백엔드 환경이 필요합니다. Cloud Functions, Cloud Run과 같은 컨테이너 플랫폼 또는 자체 서버일 수 있습니다.

이 환경에서 앱 클라이언트로부터 신뢰성 증명을 수신하고 신뢰성 증명이 통과되면 앱 체크 토큰을 반환하는 네트워크에 액세스 가능한 서비스를 제공합니다. 신뢰성 증명으로 사용하는 특정 표시기는 사용 중인 타사 공급업체 또는 자체 개발 표시기(커스텀 로직을 구현하는 경우)에 따라 달라집니다.

일반적으로 이 서비스를 REST 또는 gRPC 엔드포인트로 노출하지만, 세부정보는 직접 결정합니다.

토큰 획득 엔드포인트 만들기

  1. Admin SDK 설치 및 초기화

  2. 클라이언트로부터 인증 데이터를 수신할 수 있으며 네트워크에 액세스할 수 있는 엔드포인트를 만듭니다. 예를 들어 Cloud Functions를 사용하는 경우 다음과 같습니다.

    // Create endpoint at https://example-app.cloudfunctions.net/fetchAppCheckToken
    exports.fetchAppCheckToken = functions.https.onRequest((request, response) => {
      // ...
    });
    
  3. 신뢰성 데이터를 평가하는 엔드포인트 로직에 추가합니다. 이는 커스텀 앱 체크 제공자의 핵심 로직이며, 개발자가 직접 작성해야 합니다.

  4. 클라이언트를 신뢰할 수 있다고 판단하면 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 오류 반환).

  5. 선택사항: AppCheckTokenOptions 객체를 createToken()에 전달하여 커스텀 제공자에서 발급한 앱 체크 토큰의 TTL(수명)을 설정합니다. TTL은 30분에서 7일 사이의 값으로 설정할 수 있습니다. 이 값을 설정할 때는 다음 장단점을 고려하세요.

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

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

다음 단계

이제 커스텀 제공자의 서버 측 로직을 구현했으므로 Apple, Android, 클라이언트에서 커스텀 제공자를 사용하는 방법을 알아보세요.