Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

iOSでアプリ認証を使用してアプリチェックを有効にする

このページでは、組み込みのApp Attestプロバイダーを使用して、iOSアプリでアプリチェックを有効にする方法を示します。アプリチェックを有効にすると、アプリのみがプロジェクトのFirebaseリソースにアクセスできるようになります。参照してください。概要この機能を。

アプリのチェックが使用するアプリケーションの証明をFirebaseサービスへの要求があなたの本物のアプリから来ていることを確認します。アプリのチェックは、現在をアプリ証明を使用していない不正リスクを分析します

独自のカスタムプロバイダとのAppチェックを使用する場合は、参照のカスタムアプリのチェック・プロバイダーを実装

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

  1. お使いのiOSプロジェクトにFirebaseを追加あなたはまだ行っていない場合。

  2. 中のApp証明プロバイダとアプリケーションのチェックを使用するようにアプリを登録するプロジェクト設定>アプリケーションのチェックFirebaseコンソールのセクション。

    Firebase製品のエンフォースメントを有効にすると、登録済みのアプリのみが製品のバックエンドリソースにアクセスできるようになるため、通常はプロジェクトのすべてのアプリを登録する必要があります。

  3. オプション:アプリの登録設定では、プロバイダによって発行されたアプリケーション・チェック・トークンのカスタム生存時間(TTL)を設定します。 TTLは30分から7日の間の任意の値に設定できます。この値を変更するときは、次のトレードオフに注意してください。

    • セキュリティ:TTLを短くすると、リークまたはインターセプトされたトークンが攻撃者によって悪用される可能性のあるウィンドウが減少するため、セキュリティが強化されます。
    • パフォーマンス:TTLが短いほど、アプリはより頻繁に認証を実行します。アプリの認証プロセスは、実行されるたびにネットワークリクエストにレイテンシを追加するため、TTLが短いとアプリのパフォーマンスに影響を与える可能性があります。
    • クォータ:TTLが短く、再認証が頻繁に行われると、クォータがすぐに使い果たされます。参照してくださいクォータ&制限を

    1時間のデフォルトのTTLは、ほとんどのアプリケーションのための合理的です。

2.アプリチェックライブラリをアプリに追加します

  1. プロジェクトのにアプリの確認のための依存関係を追加しますPodfile

    pod 'Firebase/AppCheck'

    あるいは、あなたは使用することができスウィフトパッケージマネージャを代わりに。

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

  2. 実行はpod installと作成されたオープン.xcworkspaceファイルを。

  3. Xcodeで、あなたのアプリをアプリ証明する機能を追加。

  4. プロジェクトの中で.entitlementsファイルへのApp証明環境を設定しproduction

3.アプリチェックを初期化します

他のFirebaseSDKを使用する前に、AppCheckを初期化する必要があります。

まず、実施の書き込みAppCheckProviderFactory 。実装の詳細は、ユースケースによって異なります。

たとえば、あなただけのiOS 14上のユーザーがいる場合、後で、あなたは単に常に作成することができAppAttestProviderオブジェクト:

迅速

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

Objective-C

@interface YourSimpleAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourSimpleAppCheckProviderFactory

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

@end

それとも、あなたが作成することができAppAttestProvider後でiOS版14上のオブジェクトと、とにフォールバックDeviceCheckProvider以前のバージョンに:

迅速

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

@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クラスを設定アプリケーションは、それを使用するかを確認します。

迅速

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

FirebaseApp.configure()

Objective-C

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

[FIRApp configure];

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

更新されたクライアントアプリは、Firebaseへのすべてのリクエストとともにアプリチェックトークンの送信を開始しますが、Firebase製品では、Firebaseコンソールの[アプリチェック]セクションで適用を有効にするまで、トークンが有効である必要はありません。詳細については、次の2つのセクションを参照してください。

5.リクエストの指標を監視する

更新されたアプリがユーザーの手に渡ったので、使用しているFirebase製品に対してアプリチェックの実施を有効にできます。ただし、そうする前に、そうすることで既存の正当なユーザーを混乱させないことを確認する必要があります。

リアルタイムデータベースとクラウドストレージ

リアルタイムデータベースとクラウドストレージでこの決定を行うために使用できる重要なツールは、アプリチェックリクエストの指標画面です。

製品のアプリケーションのチェック要求メトリックを表示するには、開くプロジェクト設定>アプリケーションのチェックFirebaseコンソールのセクションを。例えば:

アプリチェックメトリックページのスクリーンショット

各製品のリクエストメトリックは、次の4つのカテゴリに分類されます。

  • 検証の要求は有効なアプリケーションはトークンをチェック有するものです。アプリチェックの実施を有効にすると、このカテゴリのリクエストのみが成功します。

  • 古いクライアントの要求は、Appチェックトークンが欠落しているものです。これらのリクエストは、AppCheckがアプリに含まれる前の古いバージョンのFirebaseSDKからのものである可能性があります。

  • 原因不明の要求は、アプリケーションはトークン確認不足しているものであり、それらはFirebase SDKから来るようには見えません。これらは、盗まれたAPIキーを使用して行われたリクエスト、またはFirebaseSDKを使用せずに行われた偽造されたリクエストからのものである可能性があります。

  • 無効なリクエストは、無効なアプリはアプリを偽装しようとして本物でないクライアントから、またはエミュレートされた環境からであるかもしれない、トークンチェック有するものです。

アプリのこれらのカテゴリの分布は、施行を有効にすることを決定したときに通知する必要があります。ここにいくつかのガイドラインがあります:

  • 最近のリクエストのほとんどすべてが検証済みのクライアントからのものである場合は、強制を有効にしてバックエンドリソースの保護を開始することを検討してください。

  • 最近のリクエストの大部分が古いクライアントからのものである場合は、ユーザーの混乱を避けるために、施行を有効にする前に、より多くのユーザーがアプリを更新するのを待つことを検討してください。リリースされたアプリにAppCheckを適用すると、App CheckSDKと統合されていない以前のアプリバージョンが破損します。

  • アプリがまだ起動されていない場合は、使用中の古いクライアントがないため、すぐにアプリチェックの実施を有効にする必要があります。

クラウド機能

Cloud Functionsの場合、関数のログを調べることでアプリチェックの指標を取得できます。呼び出し可能な関数を呼び出すたびに、次の例のような構造化されたログエントリが出力されます。

{
  "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
    }
  }
}

あなたがでGoogleクラウドコンソールでこれらの指標を分析することができます作成カウンタメトリックログをベース以下のメトリックのフィルタで:

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.施行を有効にする

施行を有効にするには、以下の各製品の手順に従ってください。製品のエンフォースメントを有効にすると、その製品に対する未確認のリクエストはすべて拒否されます。

リアルタイムデータベースとクラウドストレージ

リアルタイムデータベースとクラウドストレージの適用を有効にするには:

  1. 開き、プロジェクト設定>アプリケーションのチェックFirebaseコンソールのセクションを。

  2. 施行を有効にする製品のメトリックビューを展開します。

  3. 強制クリックして選択を確認。

施行を有効にしてから有効になるまで、最大10分かかる場合があることに注意してください。

クラウド機能

参照クラウド機能のためのAppチェック執行を有効にします

次のステップ

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

参照してください使用アプリケーションはiOSのデバッグプロバイダに確認してください