在 Apple 平台上使用 App Check 保護非 Firebase 資源

您可以保護應用程式的非 Firebase 資源,例如自行管理的後端。 只在 App Check。如要這樣做,您必須同時完成下列兩項操作:

  • 修改應用程式用戶端,以便在每次向後端傳送要求時一併傳送 App Check 權杖,如本頁所述。
  • 修改後端,在每次要求中要求有效的 App Check 權杖。 ,如同「從自訂後端驗證 App Check 權杖」一節所述。

事前準備

使用 App AttestDeviceCheck自訂供應器,將 App Check 新增至應用程式。

透過後端要求傳送 App Check 權杖

為確保後端要求包含有效且未過期的 App Check 權杖,請在呼叫 AppCheck.token() 時包裝每項要求。App Check 程式庫會視需要重新整理權杖,您可以在方法的完成區塊中存取權杖。

取得有效的權杖後,請將該權杖與要求傳送至後端。 您可以自行決定要如何完成這項作業,但請勿傳送 App Check 個符記,包含在查詢參數中,這是因為 容易造成意外的資料外洩和攔截下列 「範例」會透過自訂 HTTP 標頭傳送權杖, 。

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

重播防護措施 (Beta 版)

向已啟用的端點傳送要求時 重播防護措施 將要求納入對 limitedUseToken() 的呼叫中 (而非 token()):

Swift

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

Objective-C

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