Protégez les ressources non Firebase avec App Check sur les plates-formes Apple

Vous pouvez protéger les ressources non Firebase de votre application, telles que les backends auto-hébergés, avec App Check. Pour ce faire, vous devrez effectuer les deux opérations suivantes :

Avant que tu commences

Ajoutez App Check à votre application, à l'aide de App Attest , DeviceCheck ou d'un fournisseur personnalisé .

Envoyer des jetons App Check avec des requêtes backend

Pour vous assurer que vos demandes backend incluent un jeton App Check valide et non expiré, enveloppez chaque demande dans un appel à AppCheck.token() . La bibliothèque App Check actualisera le jeton si nécessaire et vous pourrez accéder au jeton dans le bloc d'achèvement de la méthode.

Une fois que vous disposez d'un jeton valide, envoyez-le avec la demande à votre backend. Les détails de la manière dont vous y parvenez dépendent de vous, mais n'envoyez pas de jetons App Check dans le cadre des URL , y compris dans les paramètres de requête, car cela les rend vulnérables aux fuites et interceptions accidentelles. L'exemple suivant envoie le jeton dans un en-tête HTTP personnalisé, ce qui constitue l'approche recommandée.

Rapide

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
}

Objectif 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 la relecture (bêta)

Lorsque vous envoyez une requête à un point de terminaison pour lequel vous avez activé la protection contre la relecture , enveloppez la requête dans un appel à limitedUseToken() au lieu de token() :

Rapide

AppCheck.appCheck().limitedUseToken() { token, error in
  // ...
}

Objectif c

[[FIRAppCheck appCheck] limitedUseTokenWithCompletion:^(FIRAppCheckToken * _Nullable token,
                                                        NSError * _Nullable error) {
    // ...
}];