Защитите пользовательские серверные ресурсы с помощью App Check на платформах Apple.

Вы можете использовать App Check для защиты пользовательских серверных ресурсов вашего приложения, не принадлежащих Google, например вашего собственного серверного сервера. Для этого вам необходимо выполнить оба следующих действия:

  • Измените клиент приложения так, чтобы он отправлял токен App Check вместе с каждым запросом на серверную часть, как описано на этой странице.
  • Измените свою серверную часть, чтобы при каждом запросе требовался действительный токен App Check , как описано в разделе Проверка токенов App Check из пользовательской серверной части .

Прежде чем начать

Добавьте App Check в свое приложение, используя App Attest , DeviceCheck или специального поставщика .

Отправка токенов App Check с помощью серверных запросов

Чтобы гарантировать, что ваши серверные запросы содержат действительный токен App Check с неистекшим сроком действия, оберните каждый запрос вызовом AppCheck.token() . Библиотека App Check при необходимости обновит токен, и вы сможете получить к нему доступ в блоке завершения метода.

Получив действительный токен, отправьте его вместе с запросом на свой сервер. Особенности того, как вы это сделаете, зависят от вас, но не отправляйте токены App Check как часть URL-адресов , в том числе в параметрах запроса, поскольку это делает их уязвимыми для случайной утечки и перехвата. В следующем примере токен отправляется в настраиваемом заголовке HTTP, что является рекомендуемым подходом.

Быстрый

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
}

Цель-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];
}];

Защита от повтора (бета)

При отправке запроса к конечной точке, для которой вы включили защиту от повторного воспроизведения , оберните запрос вызовом limitedUseToken() вместо token() :

Быстрый

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

Цель-C

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