Abilita App Check con un provider personalizzato su piattaforme Apple

Su questa pagina trovi come abilitare App Check in un app di Apple, con la vostra abitudine App Controllare fornitore . Quando abiliti App Check, contribuisci a garantire che solo la tua app possa accedere alle risorse Firebase del tuo progetto.

Se si desidera utilizzare App Verificare con il provider DeviceCheck predefinita, vedere Enable App Verificare con DeviceCheck sulle piattaforme Apple .

Prima di iniziare

1. Aggiungi la libreria App Check alla tua app

  1. Aggiungere la dipendenza per App Controllare del progetto Podfile :

    pod 'Firebase/AppCheck'

    Oppure, in alternativa, è possibile utilizzare Swift Package Manager , invece.

    Inoltre, assicurati di utilizzare l'ultima versione di qualsiasi libreria client del servizio Firebase da cui dipendi.

  2. Eseguire pod install e aprire il creato .xcworkspace file.

2. Implementare i protocolli di App Check

In primo luogo, è necessario creare classi che implementano l' AppCheckProvider e AppCheckProviderFactory protocolli.

Il tuo AppCheckProvider classe deve avere un getToken(completion:) metodo, che raccoglie tutte le informazioni vostra abitudine App Controllare provider richiede come prova di autenticità, e lo invia al servizio di acquisizione di token in cambio di un App Controllare token. L'App Controlla SDK maniglie caching gettone, in modo sempre ottenere un nuovo token nell'implementazione di getToken(completion:) .

Swift

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)
        }
    }
}

Obiettivo-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

Inoltre, implementare una AppCheckProviderFactory classe che crea istanze del AppCheckProvider implementazione:

Swift

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

Obiettivo-C

@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourCustomAppCheckProviderFactory

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

@end

3. Inizializza il controllo dell'app

Aggiungi il seguente codice di inizializzazione al delegato dell'app o all'inizializzatore dell'app:

Swift

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

FirebaseApp.configure()

Obiettivo-C

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

[FIRApp configure];

Una volta installata la libreria App Check nella tua app, inizia a distribuire l'app aggiornata ai tuoi utenti.

L'app client aggiornata inizierà a inviare token App Check insieme a ogni richiesta effettuata a Firebase, ma i prodotti Firebase non richiederanno che i token siano validi finché non abiliterai l'applicazione nella sezione App Check della console Firebase. Vedere le due sezioni successive per i dettagli.

4. Monitora le metriche delle richieste

Ora che la tua app aggiornata è nelle mani degli utenti, puoi abilitare l'applicazione di App Check per i prodotti Firebase che utilizzi. Prima di farlo, tuttavia, dovresti assicurarti che ciò non interrompa i tuoi utenti legittimi esistenti.

Database in tempo reale, Cloud Firestore e Cloud Storage

Uno strumento importante che puoi utilizzare per prendere questa decisione per Realtime Database, Cloud Firestore e Cloud Storage è la schermata delle metriche di richiesta di App Check.

Per visualizzare l'applicazione Verificare richiesta metriche per un prodotto, aprire l'Impostazioni progetto> App Controllare la sezione della console Firebase. Per esempio:

Screenshot della pagina delle metriche di App Check

Le metriche di richiesta per ogni prodotto sono suddivise in quattro categorie:

  • Richieste verificati sono quelli che hanno un App valida Controllare token. Dopo aver abilitato l'applicazione di App Check, solo le richieste in questa categoria avranno esito positivo.

  • Le richieste dei client obsoleti sono quelli che mancano un App Controllare token. Queste richieste potrebbero provenire da una versione precedente dell'SDK Firebase prima che App Check fosse incluso nell'app.

  • Le richieste di origine sconosciuta sono quelli che mancano un App Controllare token e non sembrano provengono dalla Firebase SDK. Questi potrebbero provenire da richieste effettuate con chiavi API rubate o richieste contraffatte effettuate senza l'SDK Firebase.

  • Richieste non valide sono quelle che hanno un'App non valida Controllare token, che potrebbe essere da un client non autentica di tentare di impersonare la vostra applicazione, o da ambienti emulati.

La distribuzione di queste categorie per la tua app dovrebbe informare quando decidi di abilitare l'applicazione. Ecco alcune linee guida:

  • Se quasi tutte le richieste recenti provengono da client verificati, considera di abilitare l'applicazione per iniziare a proteggere le tue risorse di backend.

  • Se una parte significativa delle richieste recenti proviene da client probabilmente obsoleti, per evitare di disturbare gli utenti, valuta di attendere che più utenti aggiornino la tua app prima di abilitare l'applicazione. L'applicazione di App Check su un'app rilasciata interromperà le versioni precedenti dell'app che non sono integrate con App Check SDK.

  • Se la tua app non è stata ancora avviata, dovresti abilitare immediatamente l'applicazione di App Check, poiché non ci sono client obsoleti in uso.

Funzioni cloud

Per Cloud Functions, puoi ottenere le metriche di App Check esaminando i log delle tue funzioni. Ogni chiamata di una funzione richiamabile emette una voce di log strutturata come il seguente esempio:

{
  "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
    }
  }
}

È possibile analizzare queste metriche nel Cloud Console di Google per la creazione di un log-based contatore metrica con il seguente filtro metrica:

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

Etichettare la metrica utilizzando il campo jsonPayload.verifications.appCheck .

5. Abilita l'applicazione

Per abilitare l'applicazione, seguire le istruzioni per ciascun prodotto, di seguito. Una volta abilitata l'applicazione per un prodotto, tutte le richieste non verificate a quel prodotto verranno respinte.

Database in tempo reale, Cloud Firestore e Cloud Storage

Per abilitare l'applicazione per Realtime Database, Cloud Firestore (iOS e Android) e Cloud Storage:

  1. Aprire il Controllo Impostazioni progetto> App sezione della console Firebase.

  2. Espandi la visualizzazione delle metriche del prodotto per il quale desideri abilitare l'applicazione.

  3. Fare clic su Applica e confermare la scelta.

Tieni presente che possono essere necessari fino a 10 minuti dopo l'attivazione dell'applicazione affinché abbia effetto.

Funzioni cloud

Vedere Abilita App Verificare l'applicazione per le funzioni cloud .