Cette page explique comment activer App Check dans une application Apple à l'aide de votre fournisseur App Check personnalisé. Lorsque vous activez App Check, vous vous assurez que seule votre application peut accéder aux ressources Firebase de votre projet.
Si vous souhaitez utiliser App Check avec les fournisseurs intégrés, consultez la documentation sur App Check avec App Attest et App Check avec DeviceCheck.
Avant de commencer
Ajoutez Firebase à votre projet Apple si ce n'est pas déjà fait.
Implémentez la logique côté serveur de votre fournisseur App Check personnalisé.
1. Ajouter la bibliothèque App Check à votre application
Ajoutez la dépendance de App Check à l'
Podfile
de votre projet :pod 'FirebaseAppCheck'
Vous pouvez également utiliser le gestionnaire de packages Swift.
Assurez-vous également d'utiliser la dernière version de toutes les bibliothèques clientes de services Firebase sur lesquelles vous dépendez.
Exécutez
pod install
et ouvrez le fichier.xcworkspace
créé.
2. Implémenter les protocoles App Check
Vous devez d'abord créer des classes qui implémentent les protocoles AppCheckProvider
et AppCheckProviderFactory
.
Votre classe AppCheckProvider
doit comporter une méthode getToken(completion:)
, qui collecte toutes les informations requises par votre fournisseur App Check personnalisé comme preuve d'authenticité, et les envoie à votre service d'acquisition de jetons en échange d'un jeton App Check. Le SDK App Check gère le stockage en cache des jetons. Obtenez donc toujours un nouveau jeton dans votre implémentation de getToken(completion:)
.
Swift
class YourCustomAppCheckProvider: NSObject, AppCheckProvider { var app: FirebaseApp init(withFirebaseApp app: FirebaseApp) { self.app = app super.init() } func getToken() async throws -> AppCheckToken { let getTokenTask = Task { () -> AppCheckToken in // ... // Create AppCheckToken object. let exp = Date(timeIntervalSince1970: expirationFromServer) let token = AppCheckToken( token: tokenFromServer, expirationDate: exp ) if Date() > exp { throw NSError(domain: "ExampleError", code: 1, userInfo: nil) } return token } return try await getTokenTask.value } }
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
Implémentez également une classe AppCheckProviderFactory
qui crée des instances de votre implémentation AppCheckProvider
:
Swift
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. Initialiser App Check
Ajoutez le code d'initialisation suivant à votre délégué d'application ou à votre initialiseur d'application:
Swift
let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) FirebaseApp.configure()
Objective-C
YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
Étapes suivantes
Une fois la bibliothèque App Check installée dans votre application, commencez à distribuer l'application mise à jour à vos utilisateurs.
L'application cliente mise à jour commencera à envoyer des jetons App Check avec chaque requête envoyée à Firebase, mais les produits Firebase n'exigeront pas que les jetons soient valides tant que vous n'aurez pas activé l'application dans la section App Check de la console Firebase.
Surveiller les métriques et activer l'application
Toutefois, avant d'activer l'application, vous devez vous assurer que cela ne perturbera pas vos utilisateurs légitimes existants. D'un autre côté, si vous constatez une utilisation suspecte des ressources de votre application, vous pouvez activer les mesures d'application dès que possible.
Pour vous aider à prendre cette décision, vous pouvez consulter les métriques App Check des services que vous utilisez:
- Surveillez les métriques de requête App Check pour Realtime Database, Cloud Firestore, Cloud Storage, Authentication (bêta) et Vertex AI in Firebase.
- Surveillez les métriques de requête App Check pour Cloud Functions.
Activer l'application des règles App Check
Une fois que vous avez compris l'impact de App Check sur vos utilisateurs et que vous êtes prêt à continuer, vous pouvez activer l'application de App Check :
- Activer l'application de App Check pour Realtime Database, Cloud Firestore, Cloud Storage, Authentication (bêta) et Vertex AI in Firebase.
- Activer l'application forcée de App Check pour Cloud Functions
Utiliser App Check dans les environnements de débogage
Si, après avoir enregistré votre application pour App Check, vous souhaitez l'exécuter dans un environnement que App Check ne classerait normalement pas comme valide, tel qu'un simulateur pendant le développement ou à partir d'un environnement d'intégration continue (CI), vous pouvez créer un build de débogage de votre application qui utilise le fournisseur de débogage App Check au lieu d'un véritable fournisseur d'attestation.
Consultez Utiliser App Check avec le fournisseur de débogage sur les plates-formes Apple.