محافظت از منابع زیرینه سفارشی با 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 را به‌عنوان بخشی از نشانی‌های وب ارسال نکنید، ازجمله در پارامترهای پُرسمان، زیرا این کار آن‌ها را دربرابر نشت تصادفی و رهگیری آسیب‌پذیر می‌کند. نمونه زیر توکن را در سرصفحه 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) {
    // ...
}];