С помощью App Check вы можете защитить собственные ресурсы бэкэнда вашего приложения, не относящиеся к Google, например, ваш собственный бэкэнд, размещенный на вашем сервере. Для этого вам потребуется выполнить оба следующих действия:
- Измените клиентское приложение таким образом, чтобы оно отправляло токен App Check вместе с каждым запросом на бэкэнд, как описано на этой странице.
- Измените свою серверную часть таким образом, чтобы при каждом запросе требовался действительный токен App Check , как описано в разделе «Проверка токенов App Check из пользовательской серверной части» .
Прежде чем начать
Добавьте в свое приложение App Check ), используя App Attest , DeviceCheck или собственный поставщик .
Отправка токенов App Check с помощью запросов к бэкэнду.
To ensure your backend requests include a valid, unexpired, App Check token, wrap each request in a call to AppCheck.token() . The App Check library will refresh the token if necessary, and you can access the token in the method's completion block.
Once you have a valid token, send it along with the request to your backend. The specifics of how you accomplish this are up to you, but don't send App Check tokens as part of URLs , including in query parameters, as this makes them vulnerable to accidental leakage and interception. The following example sends the token in a custom HTTP header, which is the recommended approach.
Быстрый
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]; }];
Защита от повторного воспроизведения (бета-версия)
При отправке запроса к конечной точке, для которой включена защита от повторного воспроизведения , оберните запрос в вызов limitedUseToken() вместо token() :
Быстрый
AppCheck.appCheck().limitedUseToken() { token, error in
// ...
}
Objective-C
[[FIRAppCheck appCheck] limitedUseTokenWithCompletion:^(FIRAppCheckToken * _Nullable token,
NSError * _Nullable error) {
// ...
}];