Nicht Firebase-Ressourcen mit App Check auf Apple-Plattformen schützen

Sie können mit App Check auch nicht Firebase-Ressourcen Ihrer App wie selbst gehostete Backends schützen. Dazu müssen Sie Folgendes tun:

Hinweis

Fügen Sie Ihrer App App Check hinzu. Verwenden Sie dazu entweder App Attest, DeviceCheck oder einen benutzerdefinierten Anbieter.

App Check-Tokens mit Backendanfragen senden

Damit deine Backend-Anfragen ein gültiges, nicht abgelaufenes App Check-Token enthalten, musst du jede Anfrage in einen Aufruf von AppCheck.token() einschließen. Die App Check-Bibliothek aktualisiert das Token bei Bedarf. Sie können im Abschlussblock der Methode auf das Token zugreifen.

Sobald du ein gültiges Token hast, sende es zusammen mit der Anfrage an dein Backend. Wie du das genau umsetzt, liegt ganz bei dir. Sende App Check-Tokens jedoch nicht als Teil von URLs, auch nicht in Abfrageparametern, da sie dadurch anfällig für versehentliches Lecken und Abfangen sind. Im folgenden Beispiel wird das Token in einem benutzerdefinierten HTTP-Header gesendet. Dies ist die empfohlene Vorgehensweise.

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];
}];

Replay-Schutz (Beta)

Wenn du eine Anfrage an einen Endpunkt sendest, für den du den Replay-Schutz aktiviert hast, musst du die Anfrage in einen Aufruf von limitedUseToken() statt token() einbetten:

Swift

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

Objective-C

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