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

می‌توانید با App Check از منابع غیر Firebase برنامه‌تان مانند backends خود میزبان محافظت کنید. برای انجام این کار، باید هر دو مورد زیر را انجام دهید:

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

قبل از اینکه شروع کنی

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

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

برای اطمینان از اینکه درخواست های پشتیبان شما شامل یک نشانه معتبر، منقضی نشده، 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];
}];

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

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

سریع

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

هدف-C

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