محافظت از منابع زیرینه سفارشی با App Check در پلاتفرم‌های Apple

می‌توانید از App Check برای محافظت از منابع باطن سفارشی غیرGoogle برای برنامه‌تان، مثل باطن خودمیزبان خودتان، استفاده کنید. برای انجام این کار، باید هر دو مورد زیر را انجام دهید:

  • همان‌طور که در این صفحه توضیح داده شده است، کارخواه برنامه‌تان را اصلاح کنید تا همراه با هر درخواست، یک کد App Check به باطن شما ارسال کند.
  • همان‌طور که در درستی‌سنجی کردن توکن‌های App Check از باطن سفارشی شرح داده شده است، باطن خود را به‌گونه‌ای اصلاح کنید که برای هر درخواست به توکن App Check معتبر نیاز داشته باشد.

قبل از شروع

بااستفاده از App Attest، DeviceCheck، یا ارائه‌دهنده سفارشی، App Check را به برنامه‌تان اضافه کنید.

ارسال کردن نشان‌های App Check با درخواست‌های پسین

برای اطمینان از اینکه درخواست‌های پسین شما شامل یک کد App Check معتبر و منقضی‌نشده است، هر درخواست را در یک فراخوانی به AppCheck.token() قرار دهید. کتابخانه App Check درصورت لزوم، کد را بازآوری می‌کند و می‌توانید در بلوک تکمیل روش به کد دسترسی پیدا کنید.

وقتی که یک کد معتبر دارید، آن را همراه با درخواست به باطن خود ارسال کنید. جزئیات نحوه انجام این کار به شما بستگی دارد، اما نشانه‌ها را به‌عنوان بخشی از نشانی‌های وب ارسال نکنیدApp Check، ازجمله در پارامترهای پُرسمان، زیرا این کار آن‌ها را دربرابر نشت تصادفی و رهگیری آسیب‌پذیر می‌کند. مثال زیر نشان می‌دهد که چگونه توکن در یک سرصفحه HTTP سفارشی ارسال می‌شود، که روش توصیه‌شده است.

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

محافظت دربرابر بازپخش (بتا)

هنگام درخواست به نقطه پایانی که برای آن محافظت دربرابر بازپخش را فعال کرده‌اید، درخواست را به‌جای token() در فراخوانی به limitedUseToken() قرار دهید:

Swift

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

Objective-C

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