Apple プラットフォームで App Attest を使用して App Check を使ってみる

このページでは、組み込みの App Attest プロバイダを使用して、Apple アプリで App Check を有効にする方法について説明します。App Check を有効にすると、自分のアプリだけがプロジェクトの Firebase リソースにアクセスできるようになります。この機能の概要をご覧ください。

App Check は App Attest を使用して、Firebase サービスに対するリクエストが正規のアプリから送信されたリクエストであることを確認します。App Check は現在、App Attest を使用して不正行為のリスクを分析しません。

独自のカスタム プロバイダで App Check を使用する場合は、App Check カスタム プロバイダを実装するをご覧ください。

1. Firebase プロジェクトを設定する

  1. App Attest を使用するには、Xcode 12.5 以降が必要です。

  2. Firebase を Apple プロジェクトに追加します(まだ行っていない場合)。

  3. Firebase コンソールで [App Check] セクションに移動し、App Attest プロバイダで App Check を使用するようにアプリを登録します。

    Firebase プロダクトで適用を有効にすると、プロダクトのバックエンド リソースにアクセスできるのは登録されているアプリのみとなるため、通常、プロジェクトのアプリすべてを登録する必要があります。

  4. 省略可: アプリの登録設定で、プロバイダが発行する App Check トークンにカスタム有効期間(TTL)を設定します。TTL は 30 分から 7 日までの任意の値に設定できます。この値を変更する場合は、次のトレードオフに注意してください。

    • セキュリティ: TTL が短いほど、漏えいしたトークンや傍受されたトークンが攻撃者によって悪用される可能性が低減するため、セキュリティが向上します。
    • パフォーマンス: TTL が短いほど、アプリで証明書の取得が頻繁に行われます。アプリで証明書が取得されるたびにネットワーク リクエストのレイテンシが増加するため、TTL が短いと、アプリのパフォーマンスに影響する可能性があります。
    • 割り当てとコスト: TTL を短くすると、証明書の取得が頻繁に発生し、割り当てが早く消費されます。有料サービスの場合は、費用が増加する可能性があります。割り当てと上限をご覧ください。

    通常は、デフォルトの TTL(1 時間)で十分です。App Check ライブラリは TTL の約半分でトークンを更新します。

2. アプリに App Check ライブラリを追加する

  1. App Check の依存関係をプロジェクトの Podfile に追加します。

    pod 'FirebaseAppCheck'

    また、Swift Package Manager を使用することもできます。

    依存している他の Firebase SDK の最新バージョンを使用していることも確認してください。

  2. pod install を実行し、作成された .xcworkspace ファイルを開きます。

  3. Xcode で、アプリに App Attest 機能を追加します。

  4. プロジェクトの .entitlements ファイルで、App Attest 環境を production に設定します。

3. App Check を初期化する

他の Firebase SDK を使用する前に App Check を初期化する必要があります。

まず、AppCheckProviderFactory の実装を作成します。実装の詳細はユースケースによって異なります。

たとえば、iOS 14 以降を使用しているユーザーのみの場合は、常に AppAttestProvider オブジェクトを作成できます。

Swift

注: この Firebase プロダクトは、watchOS ターゲットでは使用できません。

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

Objective-C

注: この Firebase プロダクトは、watchOS ターゲットでは使用できません。

@interface YourSimpleAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourSimpleAppCheckProviderFactory

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

@end

また、iOS 14 以降で AppAttestProvider オブジェクトを作成し、それより前のバージョンでは DeviceCheckProvider にフォールバックすることもできます。

Swift

注: この Firebase プロダクトは、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)
    }
  }
}

Objective-C

注: この Firebase プロダクトは、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 クラスを実装したら、そのクラスを使用するように App Check を構成します。

Swift

注: この Firebase プロダクトは、watchOS ターゲットでは使用できません。

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

FirebaseApp.configure()

Objective-C

注: この Firebase プロダクトは、watchOS ターゲットでは使用できません。

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

[FIRApp configure];

次のステップ

アプリに App Check ライブラリがインストールされたら、更新されたアプリのユーザーへの配布を開始します。

更新されたクライアント アプリは、Firebase にリクエストを送信するたびに App Check トークンを送信しますが、Firebase コンソールの [App Check] セクションで適用を有効にするまで、Firebase プロダクトは有効なトークンを必要としません。

指標をモニタリングして適用を有効にする

ただし、適用を有効にする前に、既存の正規ユーザーを中断しないように対策を行う必要があります。一方、アプリリソースの不審な使用に気づいた場合は、すぐに適用を有効にすることもできます。

使用するサービスの App Check 指標を確認すると、この決定を行ううえで役立ちます。

App Check の適用を有効にする

App Check がユーザーに与える影響を理解し、続行する準備ができたら、App Check の適用を有効にします。

デバッグ環境で App Check を使用する

アプリを App Check に登録した後に、App Check が有効と分類しないアプリを開発中のシミュレータや継続的インテグレーション(CI)環境などで実行する場合は、実際の証明書プロバイダの代わりに App Check デバッグ プロバイダを使用するデバッグビルドをアプリに作成できます。

Apple プラットフォームで App Check とデバッグ プロバイダを使用するをご覧ください。