なお、App Checkは2021年5月現在、Beta版として提供されており、今後仕様が変更される可能性がある。
このため、サービスの本番運用への適用には注意が必要である。
1. クライアント
(1) AppCheckライブラリをPodでインストールする
pod 'Firebase/AppCheck'
2. Firebase 関数
(1) プロジェクトのfirebase firebase-functions依存関係をバージョン3.14.0以降に更新する。
npm install firebase-functions@">=3.14.0"
(2) プロジェクトの firebase firebase-admin依存関係をバージョン 9.8.0 以降に更新する。
npm install firebase-admin@">=9.8.0"
(3) functions.https.onCallで呼び出されるコードに、context.appチェックを追加する。context.appが定義されていない場合、関数は失敗する。
exports.yourCallableFunction = functions.https.onCall((data, context) => {
// context.app will be undefined if the request doesn't include a valid
// App Check token.
if (context.app == undefined) {
throw new functions.https.HttpsError(
'failed-precondition',
'The function must be called from an App Check verified app.')
}
// Your function logic follows.
});
(4) 関数をデプロイする。
firebase deploy --only functions
3. Firebase コンソールの設定
(1) Appleデベロッパサイトで、DeviceCheck秘密鍵を作成する。
(2) Firebaseコンソールの[プロジェクト設定]> [アプリチェック]セクションで、DeviceCheckプロバイダーにアプリチェックを使用するようにアプリを登録する。前の手順で作成した秘密鍵を設定する必要がある。
(3) リクエストの指標を監視する。
(4) 施行を有効にする。
参考記事:
Firebase アプリのチェック
https://firebase.google.com/docs/app-check
iOSでDeviceCheckを使用してアプリチェックを有効にする
https://firebase.google.com/docs/app-check/ios
クラウド機能のアプリチェックの実施を有効にする
https://firebase.google.com/docs/app-check/cloud-functions?authuser=0
iOSのデバッグプロバイダーでアプリチェックを使用する
https://firebase.google.com/docs/app-check/ios-debug-provider#objective-c
Firebaseの新機能App Checkで乱用されるのを防ぐ
https://zenn.dev/moga/articles/appcheck_looks_good
上記で実行すると、クライアントアプリの有効性はチェックできるが、ユーザ認証は行われず、Firebaseコンソールのログには下記のように表示される。
Callable request verification passed {"verifications":{"auth":"MISSING","app":"VALID"}}
カスタムプロバイダーによるApp Checkを有効にすると、ユーザ認証まで実施できるので、よりセキュリティを強固にすることができる。
参考記事:
iOSのカスタムプロバイダーでアプリチェックを有効にする
https://firebase.google.com/docs/app-check/ios-custom-provider
カスタム App Check プロバイダーを実装する
https://firebase.google.com/docs/app-check/custom-provider