Protéger les ressources de backend personnalisées avec App Check sur les plates-formes Apple

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 :

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) {
    // ...
}];