Ative o App Check com um provedor personalizado nas plataformas da Apple

Esta página mostra como habilitar o App Check em um aplicativo da Apple, usando seu provedor personalizado do App Check . Ao ativar o App Check, você ajuda a garantir que apenas seu aplicativo possa acessar os recursos do Firebase do seu projeto.

Se você quiser usar o App Check com os provedores integrados, consulte os documentos para App Check com App Attest e App Check com DeviceCheck .

Antes de você começar

1. Adicione a biblioteca App Check ao seu aplicativo

  1. Adicione a dependência do App Check ao Podfile do seu projeto:

    pod 'FirebaseAppCheck'

    Ou, alternativamente, você pode usar o Swift Package Manager .

    Além disso, verifique se você está usando a versão mais recente de todas as bibliotecas de cliente de serviço do Firebase das quais você depende.

  2. Execute a pod install e abra o arquivo .xcworkspace criado.

2. Implemente os protocolos do App Check

Primeiro, você precisa criar classes que implementem os protocolos AppCheckProvider e AppCheckProviderFactory .

Sua classe AppCheckProvider deve ter um getToken(completion:) , que coleta todas as informações que seu provedor de App Check personalizado requer como prova de autenticidade e as envia para seu serviço de aquisição de token em troca de um token de App Check. O App Check SDK lida com cache de token, portanto, sempre obtenha um novo token em sua implementação de getToken(completion:) .

Rápido

class YourCustomAppCheckProvider: NSObject, AppCheckProvider {
    var app: FirebaseApp

    init(withFirebaseApp app: FirebaseApp) {
        self.app = app
        super.init()
    }

    func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
        DispatchQueue.main.async {
            // Logic to exchange proof of authenticity for an App Check token.
            // ...

            // Create AppCheckToken object.
            let exp = Date(timeIntervalSince1970: expirationFromServer)
            let token = AppCheckToken(
                token: tokenFromServer,
                expirationDate: exp
            )

            // Pass the token or error to the completion handler.
            handler(token, nil)
        }
    }
}

Objetivo-C

@interface YourCustomAppCheckProvider : NSObject <FIRAppCheckProvider>

@property FIRApp *app;

- (id)initWithApp:(FIRApp *)app;

@end

@implementation YourCustomAppCheckProvider

- (id)initWithApp:app {
    self = [super init];
    if (self) {
        self.app = app;
    }
    return self;
}

- (void)getTokenWithCompletion:(nonnull void (^)(FIRAppCheckToken * _Nullable,
                                                 NSError * _Nullable))handler {
    dispatch_async(dispatch_get_main_queue(), ^{
        // Logic to exchange proof of authenticity for an App Check token.
        // ...

        // Create FIRAppCheckToken object.
        NSTimeInterval exp = expirationFromServer;
        FIRAppCheckToken *token
            = [[FIRAppCheckToken alloc] initWithToken:tokenFromServer
                                       expirationDate:[NSDate dateWithTimeIntervalSince1970:exp]];

        // Pass the token or error to the completion handler.
        handler(token, nil);
    });
}

@end

Além disso, implemente uma classe AppCheckProviderFactory que cria instâncias de sua implementação AppCheckProvider :

Rápido

class YourCustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return YourCustomAppCheckProvider(withFirebaseApp: app)
  }
}

Objetivo-C

@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourCustomAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app {
    return [[YourCustomAppCheckProvider alloc] initWithApp:app];
}

@end

3. Inicialize o App Check

Adicione o seguinte código de inicialização ao seu delegado de aplicativo ou inicializador de aplicativo:

Rápido

let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()

Objetivo-C

YourAppCheckProviderFactory *providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
[FIRAppCheck setAppCheckProviderFactory:providerFactory];

[FIRApp configure];

Depois que a biblioteca do App Check estiver instalada em seu aplicativo, comece a distribuir o aplicativo atualizado para seus usuários.

O aplicativo cliente atualizado começará a enviar tokens do App Check junto com todas as solicitações feitas ao Firebase, mas os produtos Firebase não exigirão que os tokens sejam válidos até que você ative a aplicação na seção App Check do Firebase console. Consulte as próximas duas seções para obter detalhes.

4. Monitore as métricas de solicitação

Agora que seu aplicativo atualizado está nas mãos dos usuários, você pode ativar a aplicação do App Check para os produtos Firebase que você usa. Antes de fazer isso, no entanto, certifique-se de que isso não atrapalhe seus usuários legítimos existentes.

Realtime Database, Cloud Firestore e Cloud Storage

Uma ferramenta importante que você pode usar para tomar essa decisão para Realtime Database, Cloud Firestore e Cloud Storage é a tela de métricas de solicitação do App Check.

Para visualizar as métricas de solicitação do App Check para um produto, abra a seção App Check do Firebase console. Por exemplo:

Captura de tela da página de métricas do App Check

As métricas de solicitação para cada produto são divididas em quatro categorias:

  • As solicitações verificadas são aquelas que possuem um token válido do App Check. Depois de habilitar a aplicação do App Check, somente solicitações nesta categoria serão bem-sucedidas.

  • Solicitações de cliente desatualizadas são aquelas que não possuem um token do App Check. Essas solicitações podem ser de uma versão mais antiga do SDK do Firebase antes da inclusão do App Check no aplicativo.

  • Solicitações de origem desconhecidas são aquelas que não possuem um token do App Check e não parecem vir do SDK do Firebase. Podem ser de solicitações feitas com chaves de API roubadas ou solicitações forjadas feitas sem o SDK do Firebase.

  • Solicitações inválidas são aquelas que têm um token de verificação de aplicativo inválido, que pode ser de um cliente inautêntico tentando representar seu aplicativo ou de ambientes emulados.

A distribuição dessas categorias para seu aplicativo deve informar quando você decide ativar a aplicação. Aqui estão algumas orientações:

  • Se quase todas as solicitações recentes forem de clientes verificados, considere habilitar a aplicação para começar a proteger seus recursos de back-end.

  • Se uma parte significativa das solicitações recentes for de clientes provavelmente desatualizados, para evitar a interrupção dos usuários, considere esperar que mais usuários atualizem seu aplicativo antes de ativar a aplicação. A aplicação do App Check em um aplicativo lançado interromperá as versões anteriores do aplicativo que não estão integradas ao SDK do App Check.

  • Se seu aplicativo ainda não foi iniciado, você deve habilitar a aplicação do App Check imediatamente, pois não há clientes desatualizados em uso.

Funções de nuvem

Para o Cloud Functions, você pode obter as métricas do App Check examinando os registros de suas funções. Cada invocação de uma função que pode ser chamada emite uma entrada de log estruturada como no exemplo a seguir:

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

Você pode analisar essas métricas no Console do Google Cloud criando uma métrica de contador baseada em registros com o seguinte filtro de métrica:

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

Rotule a métrica usando o campo jsonPayload.verifications.appCheck .

5. Ativar aplicação

Para ativar a aplicação, siga as instruções para cada produto abaixo. Depois de ativar a aplicação de um produto, todas as solicitações não verificadas para esse produto serão rejeitadas.

Realtime Database, Cloud Firestore e Cloud Storage

Para ativar a aplicação do Realtime Database, Cloud Firestore (iOS e Android) e Cloud Storage:

  1. Abra a seção App Check do Firebase console.

  2. Expanda a visualização de métricas do produto para o qual você deseja ativar a aplicação.

  3. Clique em Aplicar e confirme sua escolha.

Observe que pode levar até 15 minutos após a ativação da imposição para que ela entre em vigor.

Funções de nuvem

Consulte Ativar a aplicação do App Check para o Cloud Functions .