Bảo vệ các tài nguyên không phải Firebase bằng tính năng Kiểm tra ứng dụng trên các nền tảng của Apple

Bạn có thể bảo vệ các tài nguyên không phải của Firebase trong ứng dụng, chẳng hạn như các phần phụ trợ tự lưu trữ, bằng App Check. Để làm như vậy, bạn cần thực hiện cả hai việc sau:

  • Sửa đổi ứng dụng của bạn để gửi mã thông báo App Check cùng với mỗi yêu cầu vào phần phụ trợ của bạn, theo mô tả trên trang này.
  • Sửa đổi phần phụ trợ của bạn để yêu cầu mã thông báo App Check hợp lệ với mọi yêu cầu, như mô tả trong phần Xác minh mã thông báo App Check qua một phần phụ trợ tuỳ chỉnh.

Trước khi bắt đầu

Thêm App Check vào ứng dụng của bạn bằng cách sử dụng tính năng Chứng thực ứng dụng, DeviceCheck hoặc nhà cung cấp tuỳ chỉnh.

Gửi mã thông báo App Check cùng với yêu cầu phụ trợ

Để đảm bảo yêu cầu chương trình phụ trợ của bạn có mã thông báo App Check hợp lệ, chưa hết hạn, gói từng yêu cầu trong một lệnh gọi đến AppCheck.token(). Thư viện App Check sẽ làm mới mã thông báo nếu cần và bạn có thể truy cập vào mã thông báo trong khối hoàn tất của phương thức.

Sau khi bạn có mã thông báo hợp lệ, hãy gửi mã thông báo đó cùng với yêu cầu đến phần phụ trợ. Chiến lược phát hành đĩa đơn chi tiết cụ thể về cách bạn thực hiện việc này là tuỳ thuộc vào bạn, nhưng đừng gửi mã thông báo App Check như một phần của URL, bao gồm cả trong tham số truy vấn, như khiến chúng dễ bị rò rỉ và chặn do vô tình. Nội dung sau đây sẽ gửi mã thông báo trong một tiêu đề HTTP tuỳ chỉnh. Bạn nên phương pháp tiếp cận.

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

Tính năng chống phát lại (thử nghiệm)

Khi gửi yêu cầu đến điểm cuối mà bạn đã bật bảo vệ phát lại, gói yêu cầu trong một lệnh gọi đến limitedUseToken() thay vì token():

Swift

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

Objective-C

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