Bảo vệ tài nguyên phụ trợ tuỳ chỉnh bằng tính năng Kiểm tra ứng dụng trên các nền tảng của Apple
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Bạn có thể dùng App Check để bảo vệ các tài nguyên phụ trợ tuỳ chỉnh không phải của Google cho ứng dụng của mình, chẳng hạn như phụ trợ tự lưu trữ của riêng bạn. Để làm như vậy, bạn cần thực hiện cả hai việc sau:
Trước khi bắt đầu
Thêm App Check vào ứng dụng của bạn bằng App Attest, DeviceCheck hoặc trình cung cấp tuỳ chỉnh.
Gửi mã thông báo App Check bằng 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 App Check hợp lệ, chưa hết hạn, hãy bao bọc 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 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ã thông báo đó cùng với yêu cầu đến phần phụ trợ của bạn. Bạn có thể tự quyết định cách thực hiện việc này, nhưng đừng gửi mã thông báo App Check trong URL, kể cả trong các tham số truy vấn, vì điều này khiến các mã thông báo dễ bị rò rỉ và bị chặn một cách vô tình. Ví dụ sau đây sẽ 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];
}];
Bảo vệ khỏi các cuộc tấn công phát lại (thử nghiệm)
Khi đưa ra yêu cầu đến một điểm cuối mà bạn đã bật tính năng chống 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) {
// ...
}];
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-08-23 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2025-08-23 UTC."],[],[],null,["You can use App Check to protect non-Google custom backend resources for\nyour app, like your own self-hosted backend. To do so, you'll need to do both of\nthe following:\n\n- Modify your app client to send an App Check token along with each request to your backend, as described on this page.\n- Modify your backend to require a valid App Check token with every request, as described in [Verify App Check tokens from a custom backend](/docs/app-check/custom-resource-backend).\n\nBefore you begin\n\nAdd App Check to your app, using either [App Attest](/docs/app-check/ios/app-attest-provider),\n[DeviceCheck](/docs/app-check/ios/devicecheck-provider), or a [custom provider](/docs/app-check/ios/custom-provider).\n\nSend App Check tokens with backend requests\n\nTo ensure your backend requests include a valid, unexpired, App Check token,\nwrap each request in a call to `AppCheck.token()`. The App Check library\nwill refresh the token if necessary, and you can access the token in the\nmethod's completion block.\n\nOnce you have a valid token, send it along with the request to your backend. The\nspecifics of how you accomplish this are up to you, but *don't send\nApp Check tokens as part of URLs*, including in query parameters, as this\nmakes them vulnerable to accidental leakage and interception. The following\nexample sends the token in a custom HTTP header, which is the recommended\napproach. \n\nSwift \n\n```swift\ndo {\n let token = try await AppCheck.appCheck().token(forcingRefresh: false)\n\n // Get the raw App Check token string.\n let tokenString = token.token\n\n // Include the App Check token with requests to your server.\n let url = URL(string: \"https://yourbackend.example.com/yourApiEndpoint\")!\n var request = URLRequest(url: url)\n request.httpMethod = \"GET\"\n request.setValue(tokenString, forHTTPHeaderField: \"X-Firebase-AppCheck\")\n\n let task = URLSession.shared.dataTask(with: request) { data, response, error in\n // Handle response from your backend.\n }\n task.resume()\n} catch(let error) {\n print(\"Unable to retrieve App Check token: \\(error)\")\n return\n}\n```\n\nObjective-C \n\n```objective-c\n[[FIRAppCheck appCheck] tokenForcingRefresh:NO\n completion:^(FIRAppCheckToken * _Nullable token,\n NSError * _Nullable error) {\n if (error != nil) {\n // Handle any errors if the token was not retrieved.\n NSLog(@\"Unable to retrieve App Check token: %@\", error);\n return;\n }\n if (token == nil) {\n NSLog(@\"Unable to retrieve App Check token.\");\n return;\n }\n\n // Get the raw App Check token string.\n NSString *tokenString = token.token;\n\n // Include the App Check token with requests to your server.\n NSURL *url = [[NSURL alloc] initWithString:@\"https://yourbackend.example.com/yourApiEndpoint\"];\n NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];\n [request setHTTPMethod:@\"GET\"];\n [request setValue:tokenString forHTTPHeaderField:@\"X-Firebase-AppCheck\"];\n\n NSURLSessionDataTask *task =\n [[NSURLSession sharedSession] dataTaskWithRequest:request\n completionHandler:^(NSData * _Nullable data,\n NSURLResponse * _Nullable response,\n NSError * _Nullable error) {\n // Handle response from your backend.\n }];\n [task resume];\n}];\n```\n\nReplay protection (beta)\n\nWhen making a request to an endpoint for which you've enabled\n[replay protection](/docs/app-check/custom-resource-backend#replay-protection),\nwrap the request in a call to `limitedUseToken()` instead of `token()`: \n\nSwift \n\n AppCheck.appCheck().limitedUseToken() { token, error in\n // ...\n }\n\nObjective-C \n\n [[FIRAppCheck appCheck] limitedUseTokenWithCompletion:^(FIRAppCheckToken * _Nullable token,\n NSError * _Nullable error) {\n // ...\n }];"]]