Proteja los recursos que no son de Firebase con App Check en plataformas Apple

Puedes proteger los recursos de tu aplicación que no son de Firebase, como los backends autohospedados, con App Check. Para hacerlo, deberá realizar las siguientes dos cosas:

  • Modifique el cliente de su aplicación para enviar un token de verificación de aplicación junto con cada solicitud a su backend, como se describe en esta página.
  • Modifique su backend para requerir un token de App Check válido con cada solicitud, como se describe en Verificar tokens de App Check desde un backend personalizado .

Antes de que empieces

Agregue App Check a su aplicación, utilizando App Attest , DeviceCheck o un proveedor personalizado .

Enviar tokens de verificación de aplicaciones con solicitudes de backend

Para garantizar que sus solicitudes de backend incluyan un token de verificación de aplicación válido y vigente, incluya cada solicitud en una llamada a AppCheck.token() . La biblioteca App Check actualizará el token si es necesario y podrá acceder al token en el bloque de finalización del método.

Una vez que tenga un token válido, envíelo junto con la solicitud a su servidor. Los detalles específicos de cómo lograr esto dependen de usted, pero no envíe tokens de verificación de aplicaciones como parte de las URL , incluidos los parámetros de consulta, ya que esto los hace vulnerables a filtraciones e intercepciones accidentales. El siguiente ejemplo envía el token en un encabezado HTTP personalizado, que es el enfoque recomendado.

Rápido

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
}

C objetivo

[[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];
}];

Protección de reproducción (beta)

Al realizar una solicitud a un punto final para el cual ha habilitado la protección de reproducción , envuelva la solicitud en una llamada a limitedUseToken() en lugar de token() :

Rápido

AppCheck.appCheck().limitedUseToken() { token, error in
  // ...
}

C objetivo

[[FIRAppCheck appCheck] limitedUseTokenWithCompletion:^(FIRAppCheckToken * _Nullable token,
                                                        NSError * _Nullable error) {
    // ...
}];