Proteggere le risorse di backend personalizzate con App Check sulle piattaforme Apple
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Puoi utilizzare App Check per proteggere le risorse di backend personalizzate non Google per
la tua app, come il tuo backend self-hosted. A questo scopo, dovrai fare entrambe le seguenti operazioni:
Modifica il client dell'app per inviare un token App Check insieme a ogni richiesta
al backend, come descritto in questa pagina.
Per assicurarti che le richieste di backend includano un token App Check valido e non scaduto,
inserisci ogni richiesta in una chiamata a AppCheck.token(). La libreria App Check
aggiornerà il token se necessario e potrai accedervi nel
blocco di completamento del metodo.
Una volta ottenuto un token valido, invialo insieme alla richiesta al tuo backend. I dettagli su come eseguire questa operazione dipendono da te, ma non inviare
token App Check come parte degli URL, inclusi i parametri di query, in quanto
li rende vulnerabili a perdite e intercettazioni accidentali. L'esempio
seguente invia il token in un'intestazione HTTP personalizzata, che è l'approccio
consigliato.
Swift
do{lettoken=tryawaitAppCheck.appCheck().token(forcingRefresh:false)// Get the raw App Check token string.lettokenString=token.token// Include the App Check token with requests to your server.leturl=URL(string:"https://yourbackend.example.com/yourApiEndpoint")!varrequest=URLRequest(url:url)request.httpMethod="GET"request.setValue(tokenString,forHTTPHeaderField:"X-Firebase-AppCheck")lettask=URLSession.shared.dataTask(with:request){data,response,errorin// Handle response from your backend.}task.resume()}catch(leterror){print("Unable to retrieve App Check token: \(error)")return}
Objective-C
[[FIRAppCheckappCheck]tokenForcingRefresh:NOcompletion:^(FIRAppCheckToken*_Nullabletoken,NSError*_Nullableerror){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=[[NSURLalloc]initWithString:@"https://yourbackend.example.com/yourApiEndpoint"];NSMutableURLRequest*request=[[NSMutableURLRequestalloc]initWithURL:url];[requestsetHTTPMethod:@"GET"];[requestsetValue:tokenStringforHTTPHeaderField:@"X-Firebase-AppCheck"];NSURLSessionDataTask*task=[[NSURLSessionsharedSession]dataTaskWithRequest:requestcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror){// Handle response from your backend.}];[taskresume];}];
Protezione replay (beta)
Quando effettui una richiesta a un endpoint per il quale hai attivato la
protezione dal replay,
inserisci la richiesta in una chiamata a limitedUseToken() anziché a token():
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-03 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 }];"]]