Chroń niestandardowe zasoby zaplecza za pomocą App Check na platformach Apple

Możesz używać App Check do ochrony niestandardowych zasobów backendu aplikacji, które nie należą do Google, takich jak Twój własny backend hostowany samodzielnie. Aby to zrobić, musisz wykonać obie te czynności:

  • Zmodyfikuj klienta aplikacji, aby wysyłał token App Check z każdym żądaniem do backendu, jak opisano na tej stronie.
  • Zmodyfikuj backend, aby wymagał prawidłowego tokena App Check przy każdym żądaniu, zgodnie z opisem w artykule Weryfikowanie tokenów App Check z niestandardowego backendu.

Zanim zaczniesz

Dodaj App Check do aplikacji, korzystając z App Attest, DeviceCheck lub niestandardowego dostawcy.

Wysyłanie tokenów App Check z żądaniami backendu

Aby mieć pewność, że żądania backendu zawierają prawidłowy, niewygasły token App Check, opakuj każde żądanie w wywołanie AppCheck.token(). Biblioteka App Check odświeży token, jeśli będzie to konieczne, a Ty możesz uzyskać dostęp do tokena w bloku zakończenia metody.

Gdy będziesz mieć prawidłowy token, wyślij go wraz z żądaniem do backendu. Sposób, w jaki to zrobisz, zależy od Ciebie, ale nie wysyłaj tokenów App Check jako części adresów URL, w tym w parametrach zapytania, ponieważ może to spowodować ich przypadkowy wyciek i przechwycenie. W tym przykładzie token jest wysyłany w niestandardowym nagłówku HTTP, co jest zalecanym podejściem.

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

Ochrona przed ponownym odtworzeniem (beta)

Gdy wysyłasz żądanie do punktu końcowego, dla którego włączono ochronę przed powtórzeniem, opakuj żądanie w wywołanie limitedUseToken() zamiast token():

Swift

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

Objective-C

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