Sie können mit App Check auch nicht Firebase-Ressourcen Ihrer App wie selbst gehostete Backends schützen. Dazu sind die folgenden beiden Schritte erforderlich:
- Ändern Sie Ihren App-Client so, dass er mit jeder Anfrage ein App Check-Token an Ihr Backend sendet, wie auf dieser Seite beschrieben.
- Ändern Sie Ihr Backend so, dass für jede Anfrage ein gültiges App Check-Token erforderlich ist, wie unter App Check-Tokens aus einem benutzerdefinierten Backend überprüfen beschrieben.
Hinweis
Fügen Sie Ihrer App App Check hinzu. Verwenden Sie dazu entweder App Attest, DeviceCheck oder einen benutzerdefinierten Anbieter.
App Check Tokens mit Backend-Anfragen senden
Damit Ihre Backend-Anfragen ein gültiges, nicht abgelaufenes App Check-Token enthalten,
Jede Anfrage in einen Aufruf von AppCheck.token()
verpacken. Die App Check-Bibliothek
aktualisiert das Token bei Bedarf. Sie können auf das Token in der
Vervollständigungsblock der Methode.
Sobald du ein gültiges Token hast, sende es zusammen mit der Anfrage an dein Backend. Die darüber, wie Sie dies erreichen, liegt bei Ihnen. Senden Sie jedoch keine App Check-Tokens als Teil von URLs, auch in Abfrageparametern, da machen sie anfällig für versehentliches Datenleck und Abfangen. Die folgenden wird das Token in einem benutzerdefinierten HTTP-Header gesendet. Dies ist die empfohlene Ansatz.
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]; }];
Replay-Schutz (Beta)
Beim Senden einer Anfrage an einen Endpunkt, für den Sie die Option
Replay-Schutz
die Anfrage in einen Aufruf von limitedUseToken()
anstelle von token()
verpacken:
Swift
AppCheck.appCheck().limitedUseToken() { token, error in
// ...
}
Objective-C
[[FIRAppCheck appCheck] limitedUseTokenWithCompletion:^(FIRAppCheckToken * _Nullable token,
NSError * _Nullable error) {
// ...
}];