Apple platformlarında özel arka uç kaynaklarını Uygulama Kontrolü ile koruma
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Uygulamanız için Google dışı özel arka uç kaynaklarını (ör. kendi kendine barındırılan arka ucunuz) korumak üzere App Check kullanabilirsiniz. Bunun için aşağıdakilerin ikisini de yapmanız gerekir:
- Uygulama istemcinizi, bu sayfada açıklandığı şekilde, arka uçunuza gönderilen her istekle birlikte bir App Check jetonu gönderecek şekilde değiştirin.
- Arka ucunuzu, Özel bir arka uçtan gelen App Check jetonlarını doğrulama bölümünde açıklandığı gibi, her istekte geçerli bir App Check jetonu gerektirecek şekilde değiştirin.
Başlamadan önce
App Attest, DeviceCheck veya özel sağlayıcı kullanarak uygulamanıza App Check ekleyin.
Arka uç istekleriyle App Check jetonları gönderme
Arka uç isteklerinizin geçerli, süresi dolmamış bir App Check jetonu içerdiğinden emin olmak için her isteği AppCheck.token()
çağrısına sarmalayın. App Check kitaplığı gerekirse jetonu yeniler ve jetona yöntemin tamamlanma bloğundan erişebilirsiniz.
Geçerli bir jetonunuz olduğunda, istekle birlikte arka ucunuza gönderin. Bunu nasıl yapacağınız size bağlıdır ancak URL'lerin bir parçası olarak App Check jetonları göndermeyin. Bu, sorgu parametreleri de dahil olmak üzere jetonların yanlışlıkla sızdırılmasına ve saldırıya uğramasına neden olur. Aşağıdaki örnekte, jetonun özel bir HTTP üstbilgisinde gönderildiği gösterilmektedir. Bu, önerilen yaklaşımdır.
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];
}];
Tekrar koruması (beta)
Yeniden oynatma korumasını etkinleştirdiğiniz bir uç noktaya istekte bulunurken isteği token()
yerine limitedUseToken()
çağrısıyla sarmalayın:
Swift
AppCheck.appCheck().limitedUseToken() { token, error in
// ...
}
Objective-C
[[FIRAppCheck appCheck] limitedUseTokenWithCompletion:^(FIRAppCheckToken * _Nullable token,
NSError * _Nullable error) {
// ...
}];
Aksi belirtilmediği sürece bu sayfanın içeriği Creative Commons Atıf 4.0 Lisansı altında ve kod örnekleri Apache 2.0 Lisansı altında lisanslanmıştır. Ayrıntılı bilgi için Google Developers Site Politikaları'na göz atın. Java, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-08-23 UTC.
[null,null,["Son güncelleme tarihi: 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 }];"]]