Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Habilitar verificação de aplicativo com um provedor personalizado no iOS

Esta página mostra-lhe como para permitir App Check-in de um aplicativo iOS, utilizando o seu costume App check provedor . Ao habilitar o App Check, você ajuda a garantir que apenas o seu aplicativo possa acessar os recursos do Firebase do seu projeto.

Se você quiser usar o App Verifique com o provedor DeviceCheck padrão, consulte Ativar App Verifique com DeviceCheck no iOS .

Antes de você começar

1. Adicione a biblioteca App Check ao seu aplicativo

  1. Adicionar a dependência para App Verifique para do seu projeto Podfile :

    pod 'Firebase/AppCheck'

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

    Além disso, verifique se você está usando a versão mais recente de qualquer biblioteca cliente de serviço do Firebase da qual depende.

  2. Run pod install e abrir o criado .xcworkspace arquivo.

2. Implementar os protocolos do App Check

Primeiro, você precisa criar classes que implementam a AppCheckProvider e AppCheckProviderFactory protocolos.

Seu AppCheckProvider classe deve ter um getToken(completion:) método, que recolhe todas as informações que o seu costume App check provedor requer como prova de autenticidade, e envia-o para o seu serviço de aquisição de sinal em troca de uma App Verifique token. A App Verifique SDK alças cache de token, por isso sempre obter 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)
        }
    }
}

Objective-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, implementar uma AppCheckProviderFactory classe que cria instâncias do seu AppCheckProvider implementação:

Rápido

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

Objective-C

@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourCustomAppCheckProviderFactory

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

@end

3. Inicialize a verificação do aplicativo

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

Rápido

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

FirebaseApp.configure()

Objective-C

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

[FIRApp configure];

Depois que a biblioteca 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 de verificação de aplicativo 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ê habilite a aplicação na seção Verificação de aplicativo do console do Firebase. 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 da Verificação de aplicativo para os produtos Firebase que você usa. Antes de fazer isso, no entanto, certifique-se de que isso não atrapalhe os usuários legítimos existentes.

Realtime Database e Cloud Storage

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

Para visualizar o aplicativo métricas check pedido de produto, abra o Configurações do projeto> App check seção do console Firebase. 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:

  • Pedidos verificados são aqueles que têm uma App válido Verifique token. Depois de habilitar a aplicação da Verificação de aplicativo, apenas as solicitações nesta categoria serão bem-sucedidas.

  • Pedidos de clientes desatualizados são aqueles que estão faltando uma verificação de token App. Essas solicitações podem ser de uma versão mais antiga do Firebase SDK antes de o App Check ser incluído no aplicativo.

  • Solicitações de origem desconhecida são aqueles que estão faltando uma App Verifique forma, e não se parecem com eles vêm do Firebase SDK. Podem ser de solicitações feitas com chaves de API roubadas ou solicitações falsificadas feitas sem o SDK do Firebase.

  • Pedidos inválidos são aqueles que têm uma App inválido Verifique token, que pode ser de um cliente inauthentic tentando personificar a sua aplicação, ou de ambientes emulados.

A distribuição dessas categorias para seu aplicativo deve informar quando você decidir habilitar a aplicação. Aqui estão algumas diretrizes:

  • 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 forem de clientes provavelmente desatualizados, para evitar interromper os usuários, considere esperar que mais usuários atualizem seu aplicativo antes de habilitar a aplicação. Aplicar a verificação de aplicativo 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 da Verificação de aplicativo imediatamente, uma vez que não há nenhum cliente desatualizado em uso.

Cloud Functions

Para Cloud Functions, você pode obter métricas de verificação de aplicativo examinando os registros de suas funções. Cada invocação de uma função que pode ser chamada emite uma entrada de registro estruturada como o 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 Google Cloud Console por criar um registos à base de contra-métrica com o filtro de métrica seguinte:

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

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

5. Habilite a aplicação

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

Realtime Database e Cloud Storage

Para ativar a aplicação do Realtime Database e Cloud Storage:

  1. Abra o check Configurações do projeto> App seção do console Firebase.

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

  3. Clique em Aplicar e confirme a sua escolha.

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

Cloud Functions

Veja Ativar App Verifique a aplicação das Funções de nuvem .