Catch up on everthing we announced at this year's Firebase Summit. Learn more

在 Apple 平台上使用 App Attest 啟用 App Check

此頁面向您展示如何使用內置的 App Attest 提供程序在 Apple 應用程序中啟用 App Check。啟用 App Check 有助於確保只有您的應用可以訪問您項目的 Firebase 資源。看到一個概述此功能。

應用程序檢查使用應用程序的Attest驗證請求火力地堡服務從你真實的應用程序來。應用來查看當前不使用應用證明分析欺詐風險

如果你想使用App中檢查你自定義的供應商,請參閱實現自定義應用程序檢查供應商

1. 設置您的 Firebase 項目

  1. 您需要 Xcode 12.5+ 才能使用 App Attest。

  2. 添加火力地堡到Apple的項目,如果你還沒有這樣做。

  3. 註冊您的應用程序使用應用程序檢查與在該應用程序的Attest提供商項目設置>應用程序檢查的火力地堡控制台部分。

    您通常需要註冊項目的所有應用,因為一旦您為 Firebase 產品啟用強制執行,只有註冊的應用才能訪問產品的後端資源。

  4. 可選:在應用註冊設置,設置一個自定義的時間生存(TTL)為App檢查令牌由供應商發出的。您可以將 TTL 設置為 30 分鐘到 7 天之間的任何值。更改此值時,請注意以下權衡:

    • 安全性:較短的 TTL 提供更強的安全性,因為它減少了攻擊者可以濫用洩漏或攔截的令牌的窗口。
    • 性能:更短的 TTL 意味著您的應用程序將更頻繁地執行證明。由於應用證明過程會在每次執行時增加網絡請求的延遲,因此較短的 TTL 可能會影響應用的性能。
    • 配額和成本:更短的 TTL 和頻繁的重新認證會更快地耗盡您的配額,而對於付費服務,可能會花費更多。見配額和限制

    1小時的默認TTL是合理的大多數應用程序。請注意,App Check 庫會在大約一半的 TTL 持續時間刷新令牌。

2. 將 App Check 庫添加到您的應用中

  1. 為App檢查的依賴添加到項目中的Podfile

    pod 'Firebase/AppCheck'

    或者,你可以用斯威夫特包管理器來代替。

    確保您還使用了您依賴的任何其他 Firebase SDK 的最新版本。

  2. 運行pod install並打開創建.xcworkspace文件。

  3. 在Xcode中,添加該應用的Attest功能來為您的應用程序。

  4. 在項目的.entitlements文件,設置應用程序的Attest環境中production

3. 初始化應用檢查

在使用任何其他 Firebase SDK 之前,您需要初始化 App Check。

首先,寫的實現AppCheckProviderFactory 。您的實施細節將取決於您的用例。

例如,如果你只有在iOS用戶14以後,你可以簡單地隨時創建AppAttestProvider對象:

迅速

注:本產品火力地堡上沒有watchOS目標。

class YourSimpleAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return AppAttestProvider(app: app)
  }
}

目標-C

注:本產品火力地堡上沒有watchOS目標。

@interface YourSimpleAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourSimpleAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(nonnull FIRApp *)app {
  return [[FIRAppAttestProvider alloc] initWithApp:app];
}

@end

或者,你可以創建AppAttestProvider對象iOS上14及更高版本,回落到DeviceCheckProvider在較早版本:

迅速

注:本產品火力地堡上沒有watchOS目標。

class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    if #available(iOS 14.0, *) {
      return AppAttestProvider(app: app)
    } else {
      return DeviceCheckProvider(app: app)
    }
  }
}

目標-C

注:本產品火力地堡上沒有watchOS目標。

@interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(nonnull FIRApp *)app {
  if (@available(iOS 14.0, *)) {
    return [[FIRAppAttestProvider alloc] initWithApp:app];
  } else {
    return [[FIRDeviceCheckProvider alloc] initWithApp:app];
  }
}

@end

你已經實現了一個後AppCheckProviderFactory類,配置應用程序檢查使用它:

迅速

注:本產品火力地堡上沒有watchOS目標。

let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()

目標-C

注:本產品火力地堡上沒有watchOS目標。

YourAppCheckProviderFactory *providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
[FIRAppCheck setAppCheckProviderFactory:providerFactory];

[FIRApp configure];

在您的應用程序中安裝 App Check 庫後,開始將更新的應用程序分發給您的用戶。

更新後的客戶端應用將開始發送 App Check 令牌以及它向 Firebase 發出的每個請求,但 Firebase 產品不需要令牌有效,直到您在 Firebase 控制台的 App Check 部分啟用強制執行。有關詳細信息,請參閱接下來的兩節。

5. 監控請求指標

現在您的更新應用已掌握在用戶手中,您可以為您使用的 Firebase 產品啟用 App Check 的強制執行。但是,在您這樣做之前,您應該確保這樣做不會干擾您現有的合法用戶。

實時數據庫、Cloud Firestore 和 Cloud Storage

您可以用來為實時數據庫、Cloud Firestore 和 Cloud Storage 做出此決定的一個重要工具是 App Check 請求指標屏幕。

要查看應用程序檢查請求指標的產物,打開項目設置>應用檢查的火力地堡控制台的部分。例如:

App Check 指標頁面的屏幕截圖

每個產品的請求指標分為四類:

  • 驗證請求是那些具有有效的應用程序檢查令牌。啟用 App Check 強制後,只有此類別中的請求才會成功。

  • 過時的客戶端請求是那些缺少應用程序檢查令牌。在 App Check 包含在應用中之前,這些請求可能來自舊版本的 Firebase SDK。

  • 來歷不明的請求是那些缺少應用程序檢查令牌,不要像他們來自火力地堡SDK。這些可能來自使用被盜 API 密鑰發出的請求或在沒有 Firebase SDK 的情況下發出的偽造請求。

  • 無效的請求是那些有一個無效的應用程序檢查令牌,這可能是從不真實客戶端試圖假冒您的應用程序,或從模擬環境。

當您決定啟用強制執行時,您的應用程序的這些類別的分佈應該通知。以下是一些指導方針:

  • 如果幾乎所有最近的請求都來自經過驗證的客戶端,請考慮啟用強制措施以開始保護您的後端資源。

  • 如果最近請求的很大一部分來自可能已經過時的客戶端,為避免干擾用戶,請考慮等待更多用戶更新您的應用,然後再啟用強制執行。對已發布的應用程序強制執行 App Check 將破壞未與 App Check SDK 集成的先前應用程序版本。

  • 如果您的應用程序尚未啟動,您應該立即啟用 App Check 強制執行,因為沒有任何過時的客戶端在使用。

雲功能

對於 Cloud Functions,您可以通過檢查函數的日誌來獲取 App Check 指標。可調用函數的每次調用都會發出一個結構化的日誌條目,如下例所示:

{
  "severity": "INFO",    // INFO, WARNING, or ERROR
  "logging.googleapis.com/labels": {"firebase-log-type": "callable-request-verification"},
  "jsonPayload": {
    "message": "Callable header verifications passed.",
    "verifications": {
      // ...
      "app": "MISSING",  // VALID, INVALID, or MISSING
    }
  }
}

您可以通過分析在谷歌雲端控制台這些指標建立一個日誌,基於計數器的度量與以下數據過濾器:

resource.type="cloud_function"
resource.labels.function_name="YOUR_CLOUD_FUNCTION"
resource.labels.region="us-central1"
labels.firebase-log-type="callable-request-verification"

標籤的指標使用領域jsonPayload.verifications.appCheck

6. 啟用執行

要啟用強制執行,請按照以下每個產品的說明進行操作。為產品啟用強制執行後,所有對該產品的未經驗證的請求都將被拒絕。

實時數據庫、Cloud Firestore 和 Cloud Storage

要為實時數據庫、Cloud Firestore(iOS 和 Android)和 Cloud Storage 啟用強制措施:

  1. 打開項目設置>應用程序檢查的火力地堡控制台部分。

  2. 展開要為其啟用強制執行的產品的指標視圖。

  3. 點擊強制執行,並確認您的選擇。

請注意,啟用強制執行後最多可能需要 10 分鐘才能生效。

雲功能

請參閱啟用應用檢查執法雲功能

下一步

如果在為 App Check 註冊您的應用程序後,您希望在 App Check 通常不會將其歸類為有效的環境中運行您的應用程序,例如開發期間的模擬器,或從持續集成 (CI) 環境中運行您的應用程序,您可以創建使用 App Check 調試提供程序而不是真正的證明提供程序的應用程序的調試版本。

請參閱使用App請與蘋果平台的調試提供者