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

Sie können die nicht Firebase-Ressourcen Ihrer App, z. B. selbst gehostete Backends, mit App Check schützen. Dazu sind die folgenden beiden Schritte erforderlich:

  • Ändern Sie Ihren Anwendungsclient so, dass ein App Check-Token zusammen mit jeder Anfrage an Ihr Back-End gesendet wird, wie auf dieser Seite beschrieben.
  • Ändern Sie Ihr Backend so, dass für jede Anfrage ein gültiges App Check-Token erforderlich ist, wie unter App Check-Tokens über ein benutzerdefiniertes Backend überprüfen beschrieben.

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, solltest du jede Anfrage in einen Aufruf von AppCheck.token() einschließen. Die App Check-Bibliothek aktualisiert das Token bei Bedarf und 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 Sie dies genau erreichen, liegt in Ihrer Entscheidung. Senden Sie App Check-Tokens jedoch nicht als Teil von URLs, einschließlich in Abfrageparametern, da sie dadurch anfällig für versehentliches Leck 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) {
    // ...
}];