Benutzerdefinierte Back-End-Ressourcen mit App Check auf Apple-Plattformen schützen

Mit App Check können Sie benutzerdefinierte Backend-Ressourcen, die nicht von Google stammen, für Ihre App schützen, z. B. Ihr eigenes selbst gehostetes Backend. Dazu müssen Sie Folgendes tun:

  • Ändern Sie Ihren App-Client so, dass er mit jeder Anfrage an Ihr Backend ein App Check-Token sendet, 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 von einem benutzerdefinierten Backend prüfen beschrieben.

Hinweis

Fügen Sie Ihrer App App Check hinzu, entweder mit App Attest, DeviceCheck oder einem benutzerdefinierten Anbieter.

App Check-Tokens mit Backend-Anfragen senden

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

Sobald Sie ein gültiges Token haben, senden Sie es zusammen mit der Anfrage an Ihr Backend. Wie Sie das genau umsetzen, bleibt Ihnen überlassen. Senden Sie jedoch keine App Check-Tokens als Teil von URLs, auch nicht in Suchparametern, da sie sonst versehentlich weitergegeben und abgefangen werden können. 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];
}];

Schutz vor Wiederholungsangriffen (Beta)

Wenn Sie eine Anfrage an einen Endpunkt senden, für den Sie den Wiedergabeschutz aktiviert haben, verpacken Sie die Anfrage in einen Aufruf von limitedUseToken() anstelle von token():

Swift

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

Objective-C

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