Bạn có thể bảo vệ những tài nguyên không phải Firebase của ứng dụng, chẳng hạn như các phần phụ trợ tự lưu trữ, bằng tính năng Kiểm tra ứng dụng. Để thực hiện điều này, bạn cần phải thực hiện cả hai việc sau:
- Sửa đổi ứng dụng khách 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 đến phần phụ trợ, như 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 Kiểm tra ứng dụng hợp lệ với mọi yêu cầu, như mô tả trong bài viết Xác minh mã thông báo Kiểm tra ứng dụng qua một phần phụ trợ tuỳ chỉnh.
Trước khi bắt đầu
Thêm tính năng Kiểm tra ứng dụng vào ứng dụng của bạn bằng cách sử dụng tính năng Kiểm thử ứng dụng, DeviceCheck hoặc nhà cung cấp tuỳ chỉnh.
Gửi mã thông báo Kiểm tra ứng dụng cù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 có 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 vào mã thông báo trong khối hoàn thành của phương thức.
Sau khi bạn có mã thông báo hợp lệ, hãy gửi mã đó cùng với yêu cầu đến phần phụ trợ. Bạn có toàn quyền quyết định cách thực hiện việc này, nhưng đừng gửi mã thông báo Kiểm tra ứng dụng dưới dạng một phần của URL (kể cả trong tham số truy vấn), vì điều này khiến mã dễ bị rò rỉ và chặn do vô tình. Ví dụ sau đây gửi mã thông báo trong một tiêu đề HTTP tuỳ chỉnh, đây là phương pháp được đề xuất.
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]; }];
Chống phát lại (thử nghiệm)
Khi gửi yêu cầu đến một điểm cuối mà bạn đã bật tính năng bảo vệ phát lại, hãy 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) {
// ...
}];