1. Introduction
Firebase App Check vous aide à protéger vos ressources de backend contre les utilisations abusives, comme la fraude à la facturation et le hameçonnage, en s'assurant que les requêtes proviennent d'applications et d'appareils légitimes. Il fonctionne à la fois avec les services Firebase et vos propres services de backend pour protéger vos ressources.
Pour en savoir plus sur Firebase App Check, consultez 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.
Objectifs de l'atelier
Dans cet atelier de programmation, vous allez ajouter et appliquer App Check dans un exemple d'application existant afin de protéger la base de données en temps réel du projet contre l'accès par des applications et des appareils illégitimes.
Points abordés
- Ajouter Firebase App Check à une application existante
- Installer différents fournisseurs d'attestation Firebase App Check
- Découvrez comment configurer App Attest pour votre application.
- Comment configurer le fournisseur d'attestation de débogage pour tester votre application sur des simulateurs pendant son développement.
Prérequis
- Xcode 13.3.1 ou version ultérieure
- Un compte Apple Developer qui vous permet de créer des identifiants d'application
- Un appareil iOS/iPadOS compatible avec App Attest (en savoir plus sur la disponibilité de l'API App Attest)
2. Obtenir le projet de démarrage
Le dépôt de démarrage rapide Firebase pour iOS contient des exemples d'applications pour illustrer différents produits Firebase. Vous allez utiliser l'application de démarrage rapide Firebase Database pour SwiftUI comme base de cet atelier de programmation.
Clonez le dépôt des démarrages rapides Firebase 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 de démarrage rapide SwiftUI Realtime Database dans Xcode :
cd database/DatabaseExampleSwiftUI/DatabaseExample xed .
3. Ajouter App Check à votre application
- Attendez que Swift Package Manager résolve les dépendances du projet.
- Ouvrez l'onglet Général de la cible d'application
DatabaseExample (iOS)
. Ensuite, dans la section Frameworks, Libraries, and Embedded Content (Frameworks, bibliothèques et contenu intégré), cliquez sur le bouton +. - Sélectionnez pour ajouter
FirebaseAppCheck
.
4. Créer et installer la fabrique de fournisseurs App Check
- Dans le groupe de fichiers
Shared
, ajoutez un groupe nomméAppCheck
. - Dans ce groupe, créez une classe de fabrique dans un fichier distinct, par exemple
MyAppCheckProviderFactory.swift
, en veillant à l'ajouter à la cibleDatabaseExample (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 } }
- Ensuite, dans
DatabaseExampleApp.swift
, veillez à importerFirebaseAppCheck
et à définir une instance de la classeMyAppCheckProviderFactory
comme fabrique de fournisseurs 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 les étapes suivantes dans la console Firebase :
- Configurez un projet Firebase.
- Ajoutez votre application iOS au projet Firebase.
- Configurez Firebase Authentication.
- Initialisez l'instance Realtime Database que vous allez protéger.
- Configurez App Check.
Créer un projet
Pour commencer, vous devez créer un projet Firebase.
- Connectez-vous à la console Firebase à l'aide de votre compte Google.
- Cliquez sur le bouton pour créer un projet, puis saisissez un nom (par exemple,
App Check Codelab
). - Cliquez sur Continuer.
- Si vous y êtes invité, lisez et acceptez les Conditions d'utilisation de Firebase, puis cliquez sur Continuer.
- (Facultatif) Activez l'assistance IA dans la console Firebase (appelée "Gemini dans Firebase").
- Pour cet atelier de programmation, vous n'avez pas besoin de Google Analytics. Désactivez donc l'option Google Analytics.
- Cliquez sur Créer un projet, attendez que votre projet soit provisionné, puis cliquez sur Continuer.
Créer une instance Realtime Database
Accédez maintenant à la section Realtime Database de la console Firebase.
- Cliquez sur le bouton Créer une base de données pour lancer le workflow de création de la base de données.
- Conservez l'emplacement par défaut (
us-central1
) pour la base de données, puis cliquez sur Suivant. - Assurez-vous que le mode verrouillé est sélectionné, puis cliquez sur le bouton Activer pour activer les règles de sécurité pour votre base de données.
- Accédez à l'onglet Rules (Règles) de l'explorateur Realtime Database, puis 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" } } } } } }
- Cliquez sur le bouton Publier pour activer les règles de sécurité mises à jour.
Préparer votre application iOS à être associée à Firebase
Pour pouvoir exécuter l'application exemple sur un appareil physique, vous devez ajouter le projet à votre équipe de développement afin qu'Xcode puisse gérer le profil de provisionnement requis pour vous. Pour ajouter l'application exemple à votre compte de développeur, procédez comme suit :
- Dans Xcode, sélectionnez le projet
DatabaseExample
dans le navigateur de projet. - Sélectionnez la cible
DatabaseExample (iOS)
et ouvrez l'onglet Signing & Capabilities (Signature et capacités). - Le message d'erreur "La signature pour DatabaseExample (iOS) nécessite une équipe de développement" devrait s'afficher.
- Remplacez l'identifiant du bundle par un identifiant unique. Le moyen le plus simple d'y parvenir est d'utiliser le nom de domaine inversé de votre site Web, par exemple
com.acme.samples.firebase.quickstart.DatabaseExample
(veuillez ne pas utiliser cet ID, mais choisir votre propre ID unique). - Sélectionnez votre équipe de développement.
- Vous saurez que tout s'est bien passé lorsque Xcode affichera "Provisioning Profile: Xcode Managed Profile" (Profil de provisionnement : profil géré par Xcode) et une petite icône d'information à côté de ce libellé. Cliquez sur cette icône pour afficher plus de détails sur le profil de provisionnement.
Associer votre application iOS
Pour obtenir une explication détaillée sur l'association de votre application, consultez la documentation sur l'ajout de Firebase à votre projet iOS. Pour commencer, suivez ces étapes principales dans la console Firebase :
- Sur l'écran Vue d'ensemble du projet de votre nouveau projet, cliquez sur le bouton + Ajouter une application, puis sur l'icône iOS+ pour ajouter une application iOS à votre projet Firebase.
- Saisissez l'ID du bundle de votre application (utilisez celui que vous avez défini dans la section précédente, par exemple
com.acme.samples.firebase.quickstart.DatabaseExample
. N'oubliez pas qu'il doit s'agir d'un identifiant unique). - Cliquez sur Register App (Enregistrer l'application).
- Firebase génère un fichier
GoogleService-Info.plist
contenant toutes les métadonnées Firebase nécessaires pour votre application. - Cliquez sur Télécharger GoogleService-Info.plist pour télécharger le fichier.
- 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. - 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 cibleDatabaseExample (iOS)
, en veillant à ce qu'il soit nomméGoogleService-Info.plist
. - Cliquez pour passer les étapes restantes de la procédure d'inscription. Étant donné que l'exemple de projet est déjà configuré correctement, vous n'avez pas besoin de modifier le code.
Configurer Firebase Authentication
Ouf ! La configuration est déjà assez complexe, mais ne vous inquiétez pas, nous n'avons pas encore terminé ! Si vous débutez avec Firebase, vous avez découvert les éléments essentiels d'un workflow que vous maîtriserez bientôt.
Vous allez maintenant configurer Firebase Authentication pour cette application.
Activer le fournisseur d'authentification par adresse e-mail/mot de passe
- Toujours dans la console Firebase, ouvrez la section Authentification.
- Cliquez sur Commencer pour configurer Firebase Authentication pour votre projet.
- Sélectionnez l'onglet Méthode de connexion.
- Sélectionnez Adresse e-mail/Mot de passe dans la section Fournisseurs natifs.
- Activez Adresse e-mail/Mot de passe, puis cliquez sur Enregistrer.
Ajouter un utilisateur de test
- Ouvrez l'onglet Utilisateurs de la section Authentification.
- Cliquez sur Ajouter un utilisateur.
- Spécifiez une adresse e-mail et un mot de passe pour votre utilisateur test, puis cliquez sur Ajouter un utilisateur.
Testez l'application
Revenez à Xcode et exécutez l'application sur le simulateur iOS. Connectez-vous avec l'adresse e-mail et le mot de passe de l'utilisateur test que vous venez de créer. Une fois connecté, créez un post, ajoutez un commentaire à un post existant et ajoutez/supprimez des posts des favoris.
6. Configurer un fournisseur d'attestation App Attest
Lors de cette étape, vous allez configurer App Check pour utiliser le fournisseur App Attest dans la console Firebase.
- Dans la console Firebase, accédez à la section App Check.
- Cliquez sur Commencer.
- Dans l'onglet Applications, cliquez sur votre application pour afficher ses détails.
- Cliquez sur App Attest pour configurer App Attest, puis saisissez l'ID d'équipe de votre compte Apple Developer (vous le trouverez dans la section Membership du portail Apple Developer) :
- Cliquez sur Enregistrer.
Vous disposez ainsi d'un projet Firebase fonctionnel connecté à votre 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 workflow, consultez Activer App Check avec App Attest sur iOS.
7. Configurer App Attest pour votre application
Il est maintenant temps de vous familiariser avec le SDK Firebase App Check et d'implémenter du code client.
Vous devez d'abord configurer le projet Xcode pour que le SDK puisse utiliser l'API App Attest d'Apple et s'assurer que les requêtes envoyées depuis votre application proviennent d'instances légitimes de votre application.
- Ajoutez la fonctionnalité App Attest pour la cible de votre application dans le projet Xcode :
- Ouvrez l'onglet Signature et capacités dans les paramètres de la cible de votre application.
- cliquez sur le bouton +.
- Dans la boîte de dialogue, recherchez et sélectionnez la fonctionnalité App Attest
.
- Un fichier
DatabaseExample (iOS).entitlements
s'affiche dans le dossier racine de votre projet Xcode après l'étape précédente. - Dans le fichier
DatabaseExample (iOS).entitlements
, remplacez la valeur de la cléApp Attest Environment
parproduction.
.
Une fois ces étapes terminées et l'application lancée sur un appareil iOS physique (iPhone/iPad), elle pourra toujours accéder à la base de données en temps réel. Dans une étape ultérieure, vous appliquerez App Check, ce qui bloquera les requêtes envoyées depuis des applications et des appareils illégitimes.
Pour en savoir plus sur ce workflow, consultez Activer App Check avec App Attest sur iOS.
8. Configurer un fournisseur d'attestation de débogage pour le simulateur iOS
Le fournisseur Débogage Firebase App Check permet de tester les applications avec l'application Firebase App Check dans des environnements non fiables, y compris le simulateur iOS, pendant le processus de développement. Vous devez ensuite configurer le fournisseur de débogage.
Installer le fournisseur de débogage Firebase dans votre application
Option 1 : Créer conditionnellement une instance du fournisseur de débogage dans votre fabrique
Vous avez déjà effectué la plupart de ces étapes lorsque vous avez créé la fabrique de fournisseurs App Check. Dans cette étape, vous allez ajouter la journalisation du secret de débogage local généré par le fournisseur de débogage. Vous pourrez ainsi 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 offre plus de flexibilité pour configurer App Check en fonction de l'environnement. Par exemple, vous pouvez utiliser d'autres fournisseurs d'attestation tels que DeviceCheck ou un fournisseur d'attestation personnalisé sur les versions d'OS où App Attest n'est pas disponible. Consultez l'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
Dans 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 évitera d'écrire quelques lignes de code lors de la création de votre propre fabrique de fournisseurs App Check.
Enregistrer votre secret de débogage dans la console Firebase
Obtenir le secret de débogage depuis votre simulateur iOS
- Si vous avez choisi d'installer
AppCheckDebugProviderFactory
(option 2 ci-dessus), vous devez activer la journalisation du débogage pour votre application en ajoutant-FIRDebugEnabled
aux arguments de lancement de l'application : - Exécuter votre application sur un simulateur
- Recherchez le secret de débogage dans la console Xcode. Vous pouvez utiliser le filtre de la console pour le trouver plus rapidement :
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 paramètres utilisateur par défaut. Si vous supprimez l'application, réinitialisez le simulateur ou utilisez un autre simulateur, un nouveau secret de débogage sera généré. Veillez à enregistrer le nouveau secret de débogage.
Enregistrer le secret de débogage
- Revenez à la console Firebase, puis accédez à la section App Check.
- Dans l'onglet Applications, cliquez sur votre application pour afficher ses détails.
- Dans le menu à développer, sélectionnez Gérer les jetons de débogage :
.
- Ajoutez le code secret que vous avez copié depuis la console Xcode, puis cliquez sur Enregistrer
.
Après ces étapes, vous pouvez utiliser l'application sur le simulateur, même si App Check est appliqué.
Remarque : Le fournisseur de débogage a été spécialement conçu pour éviter les fuites de secrets de débogage. Avec l'approche actuelle, vous n'avez pas besoin de stocker le secret de débogage dans votre code source.
Pour en savoir plus sur ce flux, consultez la documentation Utiliser App Check avec le fournisseur de débogage sur iOS.
9. Activer l'application App Check pour Firebase Realtime Database
Pour l'instant, notre application déclare un AppCheckProviderFactory
qui renvoie un AppAttestProvider
pour les appareils réels. Lorsqu'elle s'exécute sur un appareil physique, votre application effectue l'attestation et envoie les résultats au backend Firebase. Toutefois, le backend Firebase accepte toujours les requêtes de n'importe quel appareil, du simulateur iOS, d'un script, etc. Ce mode est utile si vous avez encore des utilisateurs avec une ancienne version de votre application sans App Check et que vous ne souhaitez pas encore appliquer de vérifications d'accès.
Vous devez maintenant appliquer App Check pour vous assurer que l'application Firebase n'est accessible qu'à partir d'appareils légitimes. Les anciennes versions de l'application sans intégration App Check cesseront de fonctionner une fois que vous aurez activé l'application pour le projet Firebase.
- Dans la section App Check de la console Firebase, cliquez sur Realtime Database pour afficher ses détails.
- Cliquez sur Appliquer.
- Lisez les informations de la boîte de dialogue de confirmation, puis cliquez sur Appliquer.
Une fois ces étapes effectuées, seules les applications légitimes pourront accéder à la base de données. Toutes les autres applications seront bloquées.
Essayer d'accéder à Realtime Database avec une application illégitime
Pour voir l'application App Check en action, procédez comme suit :
- 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 dansDatabaseExampleApp
. - Réinitialisez le simulateur en sélectionnant Appareil > Effacer contenu et réglages. Cela effacera le simulateur (et invalidera le jeton de l'appareil).
- Exécutez à nouveau l'application sur le simulateur.
- Le message d'erreur suivant doit s'afficher :
[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 :
- Décommentez le code d'enregistrement App Check dans
DatabaseExampleApp
. - Redémarrez l'application.
- Notez le nouveau jeton App Check dans la console Xcode.
- Enregistrez le jeton de débogage dans les paramètres App Check de votre application dans la console Firebase.
- Relancez l'application.
- Vous ne devriez plus voir de message d'erreur et devriez pouvoir ajouter de nouveaux posts et commentaires dans l'application.
10. Félicitations !
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
- Surveillez le déploiement de la version de l'application pour savoir quand appliquer App Check à votre projet Firebase.
- Activer l'application d'App Check
Étapes suivantes
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. Pour en savoir plus, consultez les liens suivants :