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

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

  • Sửa đổi ứng dụng khách ứng dụng của bạn để gửi mã thông báo Kiểm tra ứng dụng cùng với từng yêu cầu tới chương trình phụ trợ của bạn, như được mô tả trên trang này.
  • Sửa đổi chương trình phụ trợ của bạn để yêu cầu mã thông báo Kiểm tra ứng dụng hợp lệ với mọi yêu cầu, như được mô tả trong Xác minh mã thông báo Kiểm tra ứng dụng từ chương trình phụ trợ tùy chỉnh .

Trước khi bắt đầu

Thêm Kiểm tra ứng dụng vào ứng dụng của bạn bằng cách sử dụng Chứng thực ứng dụng , DeviceCheck hoặc nhà cung cấp tùy chỉnh .

Gửi mã thông báo kiểm tra ứng dụng với các yêu cầu phụ trợ

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

Khi bạn có mã thông báo hợp lệ, hãy gửi nó cùng với yêu cầu đến chương trình phụ trợ của bạn. Thông tin cụ thể về cách bạn thực hiện việc này tùy thuộc vào bạn, nhưng đừng gửi mã thông báo Kiểm tra ứng dụng như một phần của URL , kể cả trong các tham số truy vấn, vì điều này khiến chúng dễ bị rò rỉ và chặn do vô tình. Ví dụ sau gửi mã thông báo trong tiêu đề HTTP tùy chỉnh, đây là phương pháp được đề xuất.

Nhanh

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
}

Mục tiêu-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];
}];

Bảo vệ phát lại (beta)

Khi đưa ra yêu cầu tới điểm cuối mà bạn đã bật tính năng bảo vệ chống lặp lại , hãy đưa yêu cầu đó vào lệnh gọi limitedUseToken() thay vì token() :

Nhanh

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

Mục tiêu-C

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