Firebase App Check pour les plates-formes Apple

1. Introduction

Firebase App Check aide à protéger vos ressources backend contre les abus, tels que la fraude à la facturation et l'hameçonnage, en s'assurant que les demandes proviennent d'applications et d'appareils légitimes. Il fonctionne à la fois avec les services Firebase et vos propres services backend pour assurer la sécurité de vos ressources.

Vous pouvez en savoir plus sur Firebase App Check dans la documentation Firebase.

App Check utilise des services spécifiques à la plate-forme pour vérifier l'intégrité d'une application et/ou d'un appareil. Ces services sont appelés fournisseurs d'attestation . L'un de ces fournisseurs est le service App Attest d'Apple, qu'App Check peut utiliser pour vérifier l'authenticité des applications et des appareils Apple.

Ce que tu vas construire

Dans cet atelier de programmation, vous allez ajouter et appliquer App Check dans un exemple d'application existant afin que la base de données en temps réel du projet soit protégée contre l'accès par des applications et des appareils illégitimes.

Ce que vous apprendrez

  • Comment ajouter Firebase App Check à une application existante.
  • Comment installer différents fournisseurs d'attestation Firebase App Check.
  • Comment configurer App Attest pour votre application.
  • Comment configurer le fournisseur d'attestation de débogage pour tester votre application sur des simulateurs pendant le développement de l'application.

Ce dont vous aurez besoin

  • Xcode 13.3.1 ou version ultérieure
  • Un compte développeur Apple qui vous permet de créer de nouveaux identifiants d'application
  • Un appareil iOS/iPadOS prenant en charge App Attest (en savoir plus sur la disponibilité de l'API App Attest )

2. Obtenez le projet de démarrage

Le référentiel Firebase Quickstarts pour iOS contient des exemples d'applications pour présenter différents produits Firebase. Vous utiliserez l'application Firebase Database Quickstart pour SwiftUI comme base pour cet atelier de programmation.

Clonez le dépôt Firebase Quickstarts pour iOS à partir de la ligne de commande :

git clone https://github.com/firebase/quickstart-ios.git
cd quickstart-ios

Ouvrez le projet d'application Realtime Database SwiftUI Quickstart dans Xcode :

cd database/DatabaseExampleSwiftUI/DatabaseExample
xed .

3. Ajoutez App Check à votre application

  1. Attendez que Swift Package Manager résolve les dépendances du projet.
  2. Ouvrez l'onglet Général de la cible d'application DatabaseExample (iOS) . Ensuite, dans la section Frameworks, bibliothèques et contenu intégré , cliquez sur le bouton + .
  3. Sélectionnez pour ajouter FirebaseAppCheck .

4. Créez et installez l'usine de fournisseurs App Check

  1. Dans le groupe Fichier Shared , ajoutez un nouveau groupe nommé AppCheck .
  2. Dans ce groupe, créez une classe de fabrique dans un fichier séparé, par exemple MyAppCheckProviderFactory.swift , en veillant à l'ajouter à la cible DatabaseExample (iOS) :
    import Firebase
    
    class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
      func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
        #if targetEnvironment(simulator)
          // App Attest is not available on simulators.
          // Use a debug provider.
          return AppCheckDebugProvider(app: app)
        #else
          // Use App Attest provider on real devices.
          return AppAttestProvider(app: app)
        #endif
      }
    }
    
  3. Ensuite, dans DatabaseExampleApp.swift , assurez-vous d'importer FirebaseAppCheck et définissez une instance de la classe MyAppCheckProviderFactory en tant que fabrique de fournisseur App Check.
    import SwiftUI
    import FirebaseCore
    import FirebaseAppCheck
    
    @main
    struct DatabaseExampleApp: App {
      init() {
        // Set an instance of MyAppCheckProviderFactory as an App Check
        // provider factory before configuring Firebase.
        AppCheck.setAppCheckProviderFactory(MyAppCheckProviderFactory())
        FirebaseApp.configure()
      }
      ...
    }
    

5. Créer et configurer un projet Firebase

Pour utiliser App Check dans votre projet iOS, vous devez suivre ces étapes dans la console Firebase :

  • Configurez un projet Firebase.
  • Ajoutez votre application iOS au projet Firebase.
  • Configurez l'authentification Firebase.
  • Initialisez l'instance Realtime Database que vous allez protéger.
  • Configurez la vérification des applications.

Créer un projet

Tout d'abord, vous devez créer un projet Firebase.

  1. Dans la console Firebase , sélectionnez Ajouter un projet .
  2. Nommez votre projet App Check Codelab
  3. Cliquez sur Continuer.
  4. Désactivez Google Analytics pour ce projet, puis cliquez sur Créer un projet.

Créer une instance de base de données en temps réel

Maintenant, accédez à la section Base de données en temps réel de la console Firebase.

  1. Cliquez sur le bouton Créer une base de données pour lancer le workflow de création de la base de données.
  2. Laissez l'emplacement par défaut ( us-central1 ) de la base de données inchangé et cliquez sur Next .
  3. Assurez-vous que le mode verrouillé est sélectionné et cliquez sur le bouton Activer pour activer les règles de sécurité pour votre base de données.
  4. Accédez à l'onglet Règles du navigateur de la base de données en temps réel et remplacez les règles par défaut par les suivantes :
    {
        "rules": {
            // User profiles are only readable/writable by the user who owns it
            "users": {
                "$UID": {
                    ".read": "auth.uid == $UID",
                    ".write": "auth.uid == $UID"
                }
            },
            // Posts can be read by anyone but only written by logged-in users.
            "posts": {
                ".read": true,
                ".write": "auth.uid != null",
                "$POSTID": {
                    // UID must match logged in user and is fixed once set
                    "uid": {
                        ".validate": "(data.exists() && data.val() == newData.val()) || newData.val() == auth.uid"
                    },
                    // User can only update own stars
                    "stars": {
                        "$UID": {
                            ".validate": "auth.uid == $UID"
                        }
                    }
                }
            },
            // User posts can be read by anyone but only written by the user that owns it,
            // and with a matching UID
            "user-posts": {
                ".read": true,
                "$UID": {
                    "$POSTID": {
                        ".write": "auth.uid == $UID",
                        ".validate": "data.exists() || newData.child('uid').val() == auth.uid"
                    }
                }
            },
            // Comments can be read by anyone but only written by a logged in user
            "post-comments": {
                ".read": true,
                ".write": "auth.uid != null",
                "$POSTID": {
                    "$COMMENTID": {
                        // UID must match logged in user and is fixed once set
                        "uid": {
                            ".validate": "(data.exists() && data.val() == newData.val()) || newData.val() == auth.uid"
                        }
                    }
                }
            }
        }
    }
    
  5. Cliquez sur le bouton Publier pour activer les règles de sécurité mises à jour.

Préparez votre application iOS pour qu'elle soit connectée à Firebase

Pour pouvoir exécuter l'exemple d'application sur un appareil physique, vous devez ajouter le projet à votre équipe de développement afin que Xcode puisse gérer le profil d'approvisionnement requis pour vous. Suivez ces étapes pour ajouter l'exemple d'application à votre compte de développeur :

  1. Dans Xcode, sélectionnez le projet DatabaseExample dans le navigateur de projet.
  2. Sélectionnez la cible DatabaseExample (iOS) et ouvrez l'onglet Signing & Capabilities .
  3. Vous devriez voir un message d'erreur indiquant "La signature pour DatabaseExample (iOS) nécessite une équipe de développement" .
  4. Mettez à jour l'identifiant du bundle vers un identifiant unique. Le moyen le plus simple d'y parvenir consiste à utiliser le nom de domaine inversé de votre site Web, par exemple com.acme.samples.firebase.quickstart.DatabaseExample (veuillez ne pas utiliser cet ID ; choisissez plutôt votre propre ID unique).
  5. Sélectionnez votre équipe de développement.
  6. Vous saurez que tout s'est bien passé lorsque Xcode affichera "Provisioning Profile: Xcode Managed Profile" et une petite icône d'information à côté de cette étiquette. Cliquez sur cette icône pour afficher plus de détails sur le profil d'approvisionnement.

Connectez votre application iOS

Pour une explication détaillée de la connexion de votre application, consultez la documentation sur l' ajout de Firebase à votre projet iOS . Pour commencer, suivez ces étapes principales dans la console Firebase :

  1. Dans l'écran Aperçu du projet de votre nouveau projet, cliquez sur le bouton + Ajouter une application , puis cliquez sur l'icône iOS+ pour ajouter une nouvelle application iOS à votre projet Firebase.
  2. Entrez l'identifiant du bundle de votre application (utilisez celui que vous avez défini dans la section précédente, tel que com.acme.samples.firebase.quickstart.DatabaseExample - gardez à l'esprit qu'il doit s'agir d'un identifiant unique)
  3. Cliquez sur Enregistrer l'application .
  4. Firebase génère un fichier GoogleService-Info.plist contenant toutes les métadonnées Firebase nécessaires pour votre application.
  5. Cliquez sur Télécharger GoogleService-Info.plist pour télécharger le fichier.
  6. Dans Xcode, vous verrez que le projet contient déjà un fichier nommé GoogleService-Info.plist . Supprimez d'abord ce fichier - vous le remplacerez par celui de votre propre projet Firebase à l'étape suivante.
  7. Copiez le fichier GoogleService-Info.plist que vous avez téléchargé à l'étape précédente dans le dossier racine de votre projet Xcode et ajoutez-le à la cible DatabaseExample (iOS) , en vous assurant qu'il est nommé GoogleService-Info.plist
  8. Cliquez sur les étapes restantes du processus d'inscription. Étant donné que l'exemple de projet est déjà configuré correctement, vous n'avez pas besoin d'apporter de modifications au code.

Configurer l'authentification Firebase

Phew! C'est un peu de configuration jusqu'à présent, mais tenez-vous bien! Si vous êtes nouveau sur Firebase, vous avez vu des parties essentielles d'un flux de travail avec lesquelles vous serez bientôt familiarisé.

Maintenant, vous allez configurer Firebase Authentication pour cette application.

Activer le fournisseur de connexion par e-mail/mot de passe d'authentification

  1. Toujours dans la console Firebase , ouvrez la section Authentification de la console.
  2. Cliquez sur Démarrer pour configurer Firebase Authentication pour votre projet.
  3. Sélectionnez l'onglet Méthode de connexion.
  4. Sélectionnez E-mail/Mot de passe dans la section Fournisseurs natifs .
  5. Activez E-mail/Mot de passe et cliquez sur Enregistrer .

Ajouter un utilisateur test

  1. Ouvrez l'onglet Utilisateurs de la section Authentification .
  2. Cliquez sur Ajouter un utilisateur .
  3. Spécifiez une adresse e-mail et un mot de passe pour votre utilisateur de test, puis cliquez sur Ajouter un utilisateur .

Essayez l'application

Revenez à Xcode et exécutez l'application sur le simulateur iOS. Connectez-vous avec l'e-mail et le mot de passe de l'utilisateur test que vous venez de créer. Une fois connecté, créez une publication, publiez un commentaire sur une publication existante et marquez/désactivez les publications.

6. Configurer un fournisseur d'attestation App Attest

Au cours de cette étape, vous allez configurer App Check pour utiliser le fournisseur App Attest dans la console Firebase.

  1. Dans la console Firebase, accédez à la section App Check de la console.
  2. Cliquez sur Commencer .
  3. Dans l'onglet Applications , cliquez sur votre application pour développer ses détails.
  4. Cliquez sur App Attest pour configurer App Attest, puis entrez l'ID d'équipe de votre compte de développeur Apple (vous pouvez le trouver dans la section Adhésion sur le portail des développeurs Apple) : 1645f7a369b678c2.png
  5. Cliquez sur Enregistrer .

Avec cela, vous avez un projet Firebase fonctionnel qui est connecté à notre nouvelle application et App Check est activé.

Vous êtes maintenant prêt à configurer notre service d'attestation spécifique ! Pour en savoir plus sur ce flux de travail, consultez Activer App Check avec App Attest sur iOS .

7. Configurez App Attest pour votre application

Il est maintenant temps de mettre la main sur le SDK Firebase App Check et d'implémenter du code client.

Tout d'abord, vous devez configurer le projet Xcode afin que le SDK puisse utiliser l'API App Attest d'Apple pour garantir que les demandes envoyées depuis votre application proviennent d'instances légitimes de votre application.

  1. Ajoutez la fonctionnalité App Attest pour votre cible d'application dans le projet Xcode :
  2. ouvrez l'onglet Signature et capacités dans les paramètres de cible de votre application
  3. cliquez sur le bouton " + "
  4. dans la boîte de dialogue, recherchez et sélectionnez la fonctionnalité d' attestation d'application ae84cd988a5fab31.png
  5. Un fichier DatabaseExample (iOS).entitlements apparaîtra dans le dossier racine de votre projet Xcode après avoir effectué l'étape précédente.
  6. Dans le fichier DatabaseExample (iOS).entitlements , remplacez la valeur de la clé App Attest Environment par production.

Une fois que vous avez terminé ces étapes et lancé l'application sur un appareil iOS physique (iPhone/iPad), l'application pourra toujours accéder à la base de données en temps réel. Dans une étape ultérieure, vous appliquerez App Check, qui bloquera les demandes envoyées à partir d'applications et d'appareils illégitimes.

Pour en savoir plus sur ce flux de travail, consultez Activer App Check avec App Attest sur iOS .

8. Configurer un fournisseur d'attestation de débogage pour le simulateur iOS

Le fournisseur Firebase App Check Debug permet de tester des applications avec l'application Firebase App Check dans des environnements non approuvés, y compris le simulateur iOS, pendant le processus de développement. Ensuite, vous devez configurer le fournisseur de débogage ensemble.

Installez le fournisseur de débogage Firebase dans votre application

Option 1 : Créer de manière conditionnelle une instance du fournisseur de débogage dans votre usine

Vous avez fait la plupart de ces opérations lorsque vous avez créé la fabrique de fournisseurs App Check. Dans cette étape, vous ajouterez la journalisation du secret de débogage local généré par le fournisseur de débogage, afin que vous puissiez enregistrer cette instance de l'application dans la console Firebase à des fins de débogage.

Mettez à jour MyAppCheckProviderFactory.swift avec le code suivant :

import Firebase

class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
#if targetEnvironment(simulator)
    // App Attest is not available on simulators.
    // Use a debug provider.
    let provider = AppCheckDebugProvider(app: app)

    // Print only locally generated token to avoid a valid token leak on CI.
    print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")

    return provider
#else
    // Use App Attest provider on real devices.
    return AppAttestProvider(app: app)
#endif
  }
}

Cette approche nous donne plus de flexibilité pour configurer App Check en fonction de l'environnement. Par exemple, vous pouvez utiliser d'autres fournisseurs d'attestation comme DeviceCheck ou un fournisseur d'attestation personnalisé sur les versions du système d'exploitation où App Attest n'est pas disponible. Voir un exemple ci-dessous :

import Firebase

class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
      #if targetEnvironment(simulator)
      // App Attest is not available on simulators.
      // Use a debug provider.
      let provider = AppCheckDebugProvider(app: app)

      // Print only locally generated token to avoid a valid token leak on CI.
      print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")

      return provider
      #else
      if #available(iOS 14.0, *) {
        // Use App Attest provider on real devices.
        return AppAttestProvider(app: app)
      } else {
        return DeviceCheckProvider(app: app)
      }
      #endif
  }
}

Option 2 : Installer AppCheckDebugProviderFactory

Pour les cas plus simples, vous pouvez installer temporairement ou conditionnellement AppCheckDebugProviderFactory avant de configurer l'instance d'application Firebase :

init() {
#if targetEnvironment(simulator)
  let providerFactory = AppCheckDebugProviderFactory()
#else
  let providerFactory = MyAppCheckProviderFactory()
#endif

  AppCheck.setAppCheckProviderFactory(providerFactory)

  FirebaseApp.configure()
}

Cela vous fera économiser quelques lignes de code lors de la création de votre propre usine de fournisseurs App Check.

Enregistrez votre secret de débogage dans la console Firebase

Obtenez le secret de débogage de votre simulateur iOS

  1. Si vous avez choisi d'installer AppCheckDebugProviderFactory (option 2 ci-dessus), vous devez activer la journalisation de débogage pour votre application en ajoutant -FIRDebugEnabled aux arguments de lancement de l'application : f1c6b477a373e144.png
  2. Exécutez votre application sur un simulateur
  3. Trouvez le secret de débogage dans la console Xcode. Vous pouvez utiliser le filtre de la console pour le trouver plus rapidement : d4c65af93e369c55.png

Remarque : Le secret de débogage est généré pour votre simulateur lors du premier lancement de l'application et est stocké dans les valeurs par défaut de l'utilisateur. Si vous supprimez l'application, réinitialisez le simulateur ou utilisez un autre simulateur, un nouveau secret de débogage sera généré. Assurez-vous d'enregistrer le nouveau secret de débogage.

Enregistrez le secret de débogage

  1. De retour dans la console Firevbase, accédez à la section App Check .
  2. Dans l'onglet Applications , cliquez sur votre application pour développer ses détails.
  3. Dans le menu déroulant, sélectionnez Gérer les jetons de débogage : d77c8ff768a00b4b.png
  4. Ajoutez le secret que vous avez copié depuis la console Xcode, puis cliquez sur Enregistrer f845c97b86f694d0.png

Après ces étapes, vous pouvez utiliser l'application sur le simulateur même avec App Check appliqué.

Remarque : Le fournisseur de débogage a été spécialement conçu pour aider à prévenir les fuites de secret de débogage. Avec l'approche actuelle, vous n'avez pas besoin de stocker le secret de débogage dans votre code source.

Vous trouverez plus de détails sur ce flux dans la documentation - voir Utiliser App Check avec le fournisseur de débogage sur iOS .

9. Activer l'application de la vérification des applications pour la base de données en temps réel Firebase

Pour l'instant, notre application déclare un AppCheckProviderFactory qui renvoie un AppAttestProvider pour les appareils réels. Lors de l'exécution sur un appareil physique, votre application effectuera l'attestation et enverra les résultats au backend Firebase. Cependant, le backend Firebase accepte toujours les requêtes de n'importe quel appareil, du simulateur iOS, d'un script, etc. Ce mode est utile lorsque vous avez encore des utilisateurs avec une ancienne version de votre application sans App Check et que vous ne souhaitez pas imposer l'accès. vérifie encore.

Maintenant, vous devez activer l' application App Check pour vous assurer que l'application Firebase n'est accessible qu'à partir d'appareils légitimes. Les anciennes versions d'application sans intégration d'App Check cesseront de fonctionner une fois que vous aurez activé l'application pour le projet Firebase.

  1. Dans la console Firebase, dans la section App Check , cliquez sur Base de données en temps réel pour développer ses détails.
  2. Cliquez sur Appliquer .

64e6a81fa979b635.png

  1. Lisez les informations dans la boîte de dialogue de confirmation, puis cliquez sur Appliquer .

Après avoir terminé ces étapes, seules les applications légitimes pourront accéder à la base de données. Toutes les autres applications seront bloquées.

Essayez d'accéder à la base de données en temps réel avec une application illégitime

Pour voir l'application App Check en action, procédez comme suit :

  1. Désactivez l'enregistrement App Check en commentant le code d'enregistrement App Check dans la méthode init du point d'entrée de votre application dans DatabaseExampleApp .
  2. Réinitialisez le simulateur en sélectionnant Périphérique > Effacer tout le contenu et les paramètres . Cela effacera le simulateur (et invalidera le jeton de l'appareil).
  3. Exécutez à nouveau l'application sur le simulateur.
  4. Vous devriez maintenant voir le message d'erreur suivant :
    [FirebaseDatabase][I-RDB034005] Firebase Database connection was forcefully killed by the server.  Will not attempt reconnect. Reason: Invalid appcheck token.
    

Pour réactiver App Check, procédez comme suit :

  1. Décommentez le code d'enregistrement App Check dans DatabaseExampleApp .
  2. Redémarrez l'application.
  3. Prenez note du nouveau jeton App Check dans la console de Xcode.
  4. Enregistrez le jeton de débogage dans les paramètres App Check de votre application dans la console Firebase.
  5. Relancez l'application.
  6. Vous ne devriez plus voir de message d'erreur et vous devriez pouvoir ajouter de nouveaux messages et commentaires dans l'application.

10. Félicitations !

9785d32f18b995d2.gif

Vous savez maintenant comment :

  • Ajouter App Check à un projet existant
  • Configurer un fournisseur d'attestation App Attest pour la version de production de votre application
  • Configurer un fournisseur d'attestation de débogage pour tester votre application sur un simulateur
  • Observez le déploiement de la version de l'application pour savoir quand appliquer App Check pour votre projet Firebase
  • Activer l'application de la vérification des applications

Prochaines étapes

Découvrez comment utiliser Remote Config pour déployer progressivement App Check auprès de vos utilisateurs dans l' atelier de programmation Déployer progressivement Firebase App Check à l'aide de Firebase Remote Config.

Voici d'autres ressources qui pourraient vous être utiles

La configuration décrite dans cet atelier de programmation fonctionnera dans la plupart des cas, mais App Check vous offre plus de flexibilité si nécessaire. Consultez les liens suivants pour plus de détails :