Ochrona zasobów spoza Firebase za pomocą Sprawdzania aplikacji na platformach Apple

Zasoby aplikacji inne niż Firebase, takie jak hostowane lokalnie backendy, możesz chronić za pomocą App Check. Aby to zrobić, musisz wykonać te 2 czynności:

  • Zmodyfikuj klienta aplikacji, aby wraz z każdym żądaniem wysyłał do backendu token App Check zgodnie z opisem 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 usługi 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 funkcji AppCheck.token(). W razie potrzeby biblioteka App Check odświeży token i będzie można uzyskać do niego dostęp w bloku realizacji metody.

Gdy masz prawidłowy token, prześlij go wraz z żądaniem do backendu. Szczegóły tego procesu zależą od Ciebie, ale nie wysyłaj tokenów App Check w adresach URL, w tym w parametrach zapytań, ponieważ spowoduje to ich narażenie na przypadkowe wycieki i przechwytywanie. W tym przykładzie token jest wysyłany w niestandardowym nagłówku HTTP, co jest zalecaną metodą.

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 odtwarzaniem (beta)

Wysyłając żądanie do punktu końcowego, dla którego masz włączoną ochronę przed ponownym odtwarzaniem, umieść je w wywołaniu limitedUseToken() zamiast token():

Swift

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

Objective-C

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