Vous pouvez utiliser App Check pour protéger les ressources de backend personnalisées non Google pour votre application, comme votre propre backend auto-hébergé. Pour ce faire, vous devez effectuer les deux opérations suivantes :
- Modifiez le client de votre application pour qu'il envoie un jeton App Check avec chaque requête à votre backend, comme décrit sur cette page.
- Modifiez votre backend pour qu'il exige un jeton App Check valide avec chaque requête, comme décrit dans Vérifier les jetons App Check à partir d'un backend personnalisé.
Avant de commencer
Ajoutez App Check à votre application à l'aide d'App Attest, de DeviceCheck ou d'un fournisseur personnalisé.
Envoyer des App Check jetons avec des requêtes de backend
Pour vous assurer que vos requêtes de backend incluent un jeton App Check valide et non expiré,
encapsulez chaque requête dans un appel à AppCheck.token(). La App Check bibliothèque
actualise le jeton si nécessaire, et vous pouvez y accéder dans le
bloc de finalisation de la méthode.
Une fois que vous disposez d'un jeton valide, envoyez-le avec la requête à votre backend. La manière dont vous procédez dépend de vous, mais n'envoyez pas App Check de jetons dans les URL, y compris dans les paramètres de requête, car cela les rend vulnérables aux fuites et aux interceptions accidentelles. L'exemple suivant envoie le jeton dans un en-tête HTTP personnalisé, ce qui est l'approche recommandée.
Swift
do { let token = try await AppCheck.appCheck().token(forcingRefresh: false) // Get the raw App Check token string. let tokenString = token.token // Include the App Check token with requests to your server. let url = URL(string: "https://yourbackend.example.com/yourApiEndpoint")! var request = URLRequest(url: url) request.httpMethod = "GET" request.setValue(tokenString, forHTTPHeaderField: "X-Firebase-AppCheck") let task = URLSession.shared.dataTask(with: request) { data, response, error in // Handle response from your backend. } task.resume() } catch(let error) { print("Unable to retrieve App Check token: \(error)") return }
Objective-C
[[FIRAppCheck appCheck] tokenForcingRefresh:NO completion:^(FIRAppCheckToken * _Nullable token, NSError * _Nullable error) { if (error != nil) { // Handle any errors if the token was not retrieved. NSLog(@"Unable to retrieve App Check token: %@", error); return; } if (token == nil) { NSLog(@"Unable to retrieve App Check token."); return; } // Get the raw App Check token string. NSString *tokenString = token.token; // Include the App Check token with requests to your server. NSURL *url = [[NSURL alloc] initWithString:@"https://yourbackend.example.com/yourApiEndpoint"]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; [request setHTTPMethod:@"GET"]; [request setValue:tokenString forHTTPHeaderField:@"X-Firebase-AppCheck"]; NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // Handle response from your backend. }]; [task resume]; }];
Protection contre les attaques de répétition (bêta)
Lorsque vous effectuez une requête auprès d'un point de terminaison pour lequel vous avez activé la
protection contre les attaques de répétition,
encapsulez la requête dans un appel à limitedUseToken() au lieu de token() :
Swift
AppCheck.appCheck().limitedUseToken() { token, error in
// ...
}
Objective-C
[[FIRAppCheck appCheck] limitedUseTokenWithCompletion:^(FIRAppCheckToken * _Nullable token,
NSError * _Nullable error) {
// ...
}];