Identity Platform を reCAPTCHA Enterprise API と統合する
このドキュメントでは、Identity Platform と reCAPTCHA Enterprise API のインテグレーションを使用してユーザーのセキュリティを強化する方法について説明します。この機能により、スパム、不正使用、その他の不正行為に対するアプリのレジリエンスが向上します。
この統合により、ユーザー リクエストを検証する reCAPTCHA Enterprise の評価がユーザーに代わって作成されます。料金については、reCAPTCHA の料金をご覧ください。
概要
Identity Platform と reCAPTCHA Enterprise API の統合を設定すると、reCAPTCHA のデフォルトの保護機能である reCAPTCHA bot 対策が有効になります。bot 攻撃からの保護により、Identity Platform はユーザーに代わってプロジェクトにスコアベースの reCAPTCHA キーをプロビジョニングします。ユーザーが次のいずれかのオペレーションを使用してアプリまたはサイトにアクセスすると、対応するプロバイダが有効になっている場合に、クライアント SDK が reCAPTCHA を読み込みます。
プロバイダ | オペレーション | メソッド |
---|---|---|
passwordProvider |
メールとパスワードによるログイン | signInWithPassword |
メールアドレスとパスワードによる登録 | signUpPassword |
|
メールリンクによるログイン | getOobCode |
|
パスワードの再設定 | getOobCode |
|
phoneProvider |
電話番号での登録またはログイン | sendVerificationCode |
MFA 電話番号の登録 | mfaSmsEnrollment |
|
MFA 電話番号ログイン | mfaSmsSignIn |
その後、reCAPTCHA は、構成とリスク許容度に基づいてリクエストのリスクを評価するスコアを Identity Platform に提供します。
詳細については、reCAPTCHA の概要をご覧ください。
始める前に
reCAPTCHA で保護する認証フローのタイプに基づいて、次の設定が完了していることを確認します。
- メールアドレスとパスワードによる認証フローの場合は、ユーザーのメールアドレスでのログインを構成していることを確認してください。
SMS ベースの認証フローの場合は、次のいずれかにオンボーディングされていることを確認してください。
- ユーザーの電話番号によるログイン。
- ウェブ、Android、iOS アプリの多要素認証。
サービス アカウントを作成する
Identity Platform と reCAPTCHA Enterprise API の統合では、reCAPTCHA を使用するプロジェクトごとに Identity Platform サービス アカウントが必要です。これにより、Identity Platform がユーザーに代わって reCAPTCHA キーを管理できます。サービス アカウントをすでに作成している場合は、reCAPTCHA へのアクセス権を付与します。
サービス アカウントをまだ作成していない場合や、reCAPTCHA で保護するプロジェクトが他にもある場合は、次の操作を行います。
Google Cloud CLI を使用してサービス アカウントを作成します。
gcloud beta services identity create \ --service=identitytoolkit.googleapis.com \ --project=PROJECT_ID
PROJECT_ID
をそのプロジェクトの ID に置き換えます。サービス アカウントに reCAPTCHA へのアクセス権を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-identitytoolkit.iam.gserviceaccount.com \ --role=roles/identitytoolkit.serviceAgent
以下を置き換えます。
PROJECT_ID
: プロジェクト IDPROJECT_NUMBER
: プロジェクト アカウント番号
reCAPTCHA による bot 対策モード
reCAPTCHA bot 保護には、ユーザーの保護に役立つ 2 つのモード(監査と適用)があります。これらのモードは、ID プロバイダに基づいて動作が異なります。
メールとパスワードのプロバイダ
メールアドレスとパスワードの認証フローでは、監査モードと適用モードは次のように動作します。
監査モード
メールアドレスとパスワードの適用を監査モードに設定すると、Identity Platform は、リクエストをブロックせずに Identity Platform API へのトラフィックを評価するために使用される 1 つ以上の reCAPTCHA キーをプロジェクトに作成します。監査モードで出力される指標を使用して、reCAPTCHA の適用を有効にするかどうかを判断します。
自動適用モード
メールとパスワードの適用を適用モードに設定すると、Identity Platform は、Identity Platform API へのトラフィックを評価するために使用される 1 つ以上の reCAPTCHA キーをプロジェクトに作成します。reCAPTCHA トークンを含まない API リクエストは拒否されます。reCAPTCHA をサポートする SDK にすべてのクライアントを移行した後にのみ、適用を有効にします。
電話プロバイダ
電話認証フローでは、監査モードと適用モードは次のように動作します。
監査モード
電話認証の適用を監査モードに設定すると、Identity Platform はアプリの確認に reCAPTCHA ボット保護を使用します。ユーザーのリクエストが通信不正利用の評価で合格した場合、SMS 確認コードが送信されます。ユーザーのリクエストが通信不正利用の評価で不合格であり、クライアント SDK を使用している場合、Identity Platform はフォールバックの確認方法をトリガーして、電話認証フローを完了します。受け入れられるフォールバック メソッドは、アプリのプラットフォームによって異なります。
クライアント SDK は、次のシナリオでフォールバックの確認方法をトリガーします。
- reCAPTCHA トークンがありません。
- reCAPTCHA トークンが無効であるか、期限切れです。
- reCAPTCHA トークンがスコアのしきい値を超えていません。
- reCAPTCHA が正しく設定されていない。
アプリのプラットフォームのフォールバック確認方法が設定され、必要に応じてクライアント SDK によってトリガーされる準備ができていることを確認します。
ウェブ
初期の bot 保護評価が失敗した場合、監査モードは検証に reCAPTCHA v2 を使用します。そのため、reCAPTCHA 検証ツール(RecaptchaVerifier
)を設定し、次の電話認証オペレーションに渡す必要があります。
verifyPhoneNumber
signInWithPhoneNumber
linkWithPhoneNumber
reauthenticateWithPhoneNumber
auth/argument-error
を返します。reCAPTCHA ベリファイアの設定の詳細については、Firebase のドキュメントの reCAPTCHA ベリファイアを設定するをご覧ください。
Android
最初のボット保護の評価が失敗した場合、監査モードでは Play Integrity API に対してアプリが検証されます。この検証に失敗すると、reCAPTCHA v2 がトリガーされます。reCAPTCHA v2 は、次のようなシナリオでトリガーされる可能性があります。
- エンドユーザーのデバイスに Google Play 開発者サービスがインストールされていない場合。
- (Authentication SDK v21.2.0 以降で)アプリが Google Play ストアを通じて配布されたものでない場合。
- (Authentication SDK バージョン v21.2.0 より前で)取得した SafetyNet トークンが有効でない場合。
iOS
最初のボット保護評価が失敗した場合、監査モードは検証にサイレント プッシュ通知を使用します。この確認方法では、リクエスト元のデバイスのアプリにサイレント プッシュ通知でトークンを送信します。アプリが通知を正常に受信すると、電話認証フローが続行されます。アプリがプッシュ通知を受信しない場合は、reCAPTCHA v2 がトリガーされます。サイレント プッシュ通知が適切に構成されていない場合、reCAPTCHA v2 がトリガーされることがあります。
iOS アプリの検証の設定について詳しくは、Firebase ドキュメントのアプリの検証を有効にするをご覧ください。
自動適用モード
電話認証の適用を適用モードに設定すると、Identity Platform はアプリの確認に reCAPTCHA ボット保護を使用します。ユーザーのリクエストが通信不正利用の評価で合格した場合、SMS 確認コードが送信されます。ユーザーのリクエストが通信不正利用の評価で不合格になると、Identity Platform はリクエストをブロックし、確認コードを含む SMS メッセージを送信しません。
適用モードではフォールバック検証は必要ないため、アプリに追加の検証方法を設定する必要はありません。ただし、アプリの reCAPTCHA モードを AUDIT
または OFF
に変更する場合は、reCAPTCHA v2 が有効になるように、ウェブアプリ用の reCAPTCHA 検証ツールを設定することをおすすめします。
Identity Platform と reCAPTCHA Enterprise API の統合を設定する
Identity Platform と reCAPTCHA Enterprise API の統合を設定するには、次のタスクを行います。
- Admin SDK を使用して reCAPTCHA の適用状態を設定し、bot 保護を有効にします。
- アプリのプラットフォーム用にクライアント SDK を構成します。
まず、監査モードで reCAPTCHA の適用を有効にして、プロジェクトで出力される reCAPTCHA 指標をモニタリングし、認証フローが適切に保護されていることを確認することをおすすめします。これにより、ユーザーのトラフィックを中断することなく、ユーザーによる reCAPTCHA の使用状況を監査できます。認証フローが保護されていることを確認したら、ボット保護を ENFORCE
に設定します。
reCAPTCHA による bot 対策を有効にする
メールとパスワードのプロバイダ
メールアドレスとパスワードの認証フローで reCAPTCHA ボット保護を有効にするには、次の操作を行います。
まだ行っていない場合は、プロジェクトで reCAPTCHA Enterprise API を有効にします。
プロジェクトのボット保護を有効にするには、Admin SDK を使用します。reCAPTCHA のサポートは、Node.js Admin SDK バージョン 11.7.0 以降で利用できます。
次に例を示します。
// Update project config with reCAPTCHA config const updateConfigRequest = { recaptchaConfig: { emailPasswordEnforcementState: 'ENFORCE_MODE', managedRules: [{ endScore: END_SCORE, action: 'BLOCK' }] } }; const updateProjectConfigWithRecaptcha = () => { getAuth().projectConfigManager().updateProjectConfig(updateConfigRequest).then((response) => { console.log('Updated reCAPTCHA config for project: ', response.recaptchaConfig); }).catch((error) => { console.log('Error updating project config:', error); }); }
次のように置き換えます。
ENFORCE_MODE
: reCAPTCHA のメールアドレスとパスワードによる認証の適用に設定するモード。有効な値はOFF
、AUDIT
、ENFORCE
です。ボット保護を有効にするには、このパラメータをAUDIT
またはENFORCE
に設定する必要があります。ボット保護を初めて有効にする場合は、このパラメータをAUDIT
に設定し、認証フローが保護されていることを確認してからENFORCE
に設定することをおすすめします。モードの仕組みについて詳しくは、reCAPTCHA bot 保護モードをご覧ください。END_SCORE
: リクエストが失敗する前に取得できるボット保護評価スコアの最低値。このスコアは0.0
~1.0
の範囲で設定できます。たとえば、しきい値を0.6
に設定すると、reCAPTCHA は0.5
以下のリクエストをすべて失敗させます。したがって、スコアを高く設定するほど、ルールは厳しくなります。
Admin SDK を使用して、テナントに対して同じ構成メソッドでボット保護を有効にすることもできます。テナントの更新の詳細については、テナントを更新するをご覧ください。
iOS または Android で Identity Platform を使用している場合は、Firebase コンソールからアプリを登録する必要があります。
- iOS の場合は、Identity Platform を使用する各バンドル ID を登録します
- Android の場合は、Identity Platform を使用する各 Android パッケージ名を登録します
ウェブで Identity Platform を使用している場合は、reCAPTCHA を使用する各ドメインに対して承認済みドメインを追加する必要があります。承認済みドメインを追加するには、次の操作を行います。
Google Cloud コンソールで、Identity Platform ページに移動します。
[設定] > [セキュリティ] に移動します。
[ドメインを追加] をクリックします。
ドメイン名を入力し、[追加] をクリックしてドメインを保存します。
reCAPTCHA キーのプロビジョニングが完了するまでに数分かかることがあります。
適用を監査モードに設定した場合は、ボット保護の reCAPTCHA 指標をモニタリングして、フローが保護されていることを確認することをおすすめします。
電話プロバイダ
SMS ベースの認証フローで reCAPTCHA ボット保護を有効にするには、次の操作を行います。
まだ行っていない場合は、プロジェクトで reCAPTCHA Enterprise API を有効にします。
プロジェクトのボット保護を有効にするには、Admin SDK を使用します。reCAPTCHA のサポートは、Node.js Admin SDK バージョン 12.7.0 以降で利用できます。
次に例を示します。
// Update project config with reCAPTCHA config const updateProjectConfigRequest = { recaptchaConfig: { phoneEnforcementState: 'ENFORCE_MODE', managedRules: [{ endScore: END_SCORE, action: 'BLOCK' }], useSmsBotScore: 'true', } } let projectConfig = await getAuth().projectConfigManager().updateProject(updateProjectConfigRequest);
次のように置き換えます。
ENFORCE_MODE
: reCAPTCHA 電話認証の強制適用に設定するモード。有効な値はOFF
、AUDIT
、ENFORCE
です。SMS ベースのフローでボット保護を有効にするには、このパラメータをAUDIT
またはENFORCE
に設定し、useSmsBotScore
をtrue
に設定する必要があります。ボット保護を初めて有効にする場合は、このパラメータを
AUDIT
に設定し、認証フローが保護されていることを確認してからENFORCE
に設定することをおすすめします。モードの仕組みについて詳しくは、reCAPTCHA bot 保護モードをご覧ください。END_SCORE
: リクエストが失敗する前に取得できるボット保護評価スコアの最低値。このスコアは0.0
~1.0
の範囲で設定できます。たとえば、しきい値を0.6
に設定すると、reCAPTCHA は0.5
以下のリクエストをすべて失敗させます。したがって、スコアを高く設定するほど、ルールは厳しくなります。
Admin SDK を使用して、テナントに対して同じ構成メソッドでボット保護を有効にすることもできます。テナントの更新の詳細については、テナントを更新するをご覧ください。
iOS または Android で Identity Platform を使用している場合は、Firebase コンソールからアプリを登録する必要があります。
- iOS の場合は、Identity Platform を使用する各バンドル ID を登録します
- Android の場合は、Identity Platform を使用する各 Android パッケージ名を登録します
ウェブで Identity Platform を使用している場合は、reCAPTCHA を使用する各ドメインに対して承認済みドメインを追加する必要があります。承認済みドメインを追加するには、次の操作を行います。
Google Cloud コンソールで、Identity Platform ページに移動します。
[設定] > [セキュリティ] に移動します。
[ドメインを追加] をクリックします。
ドメイン名を入力し、[追加] をクリックしてドメインを保存します。
reCAPTCHA キーのプロビジョニングが完了するまでに数分かかることがあります。
適用を監査モードに設定した場合は、ボット保護の reCAPTCHA 指標をモニタリングして、フローが保護されていることを確認することをおすすめします。
クライアント SDK を構成する
アプリのプラットフォームに応じて、クライアント SDK を構成します。
Web
最新バージョンのウェブ SDK に更新します。
- ウェブアプリでのメールアドレスとパスワードによる認証の reCAPTCHA サポートは、JavaScript SDK バージョン 9.20.0 以降で利用できます。
- ウェブアプリの電話番号認証の reCAPTCHA サポートは、JavaScript SDK バージョン 11 以降で利用できます。
Web SDK をアプリと統合すると、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダの保護を有効にします。
必要に応じて、次のように reCAPTCHA シグナルを強制的に取得できます。
import { initializeRecaptchaConfig } from '@firebase/auth'; // Initialize Firebase Authentication const auth = getAuth(); initializeRecaptchaConfig(auth) .then(() => { console.log("Recaptcha Enterprise Config Initialization successful.") }) .catch((error) => { console.error("Recaptcha Enterprise Config Initialization failed with " + error) });
Android
Android SDK の最新バージョンに更新します。Android アプリでのメールアドレスとパスワード認証、電話番号認証の reCAPTCHA サポートは、Android SDK バージョン 23.1.0 以降で利用できます。
また、reCAPTCHA のサポートには API レベル 23(Marshmallow)以上と Android 6 以上が必要です。
Android SDK をアプリと統合した後、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダの保護を有効にします。
アプリレベルの
build.gradle
ファイルの依存関係セクションに、次のビルドルールを追加します。implementation 'com.google.android.recaptcha:recaptcha:18.5.1'
reCAPTCHA SDK バージョン 18.5.1 以降を使用していることを確認します。
必要に応じて、次のように reCAPTCHA シグナルを強制的に取得できます。
- Kotlin:
// Initialize Firebase Authentication auth = Firebase.auth auth.initializeRecaptchaConfig().addOnCompleteListener(this) { task -> if (task.isSuccessful) { Log.d(TAG, "Recaptcha Enterprise Initialization successful.") } else { Log.w(TAG, "Recaptcha Enterprise Initialization failed.") } }
- Java:
// Initialize Firebase Authentication auth = FirebaseAuth.getInstance(); auth.initializeRecaptchaConfig().addOnCompleteListener( this, new OnCompleteListener<void>() { @Override public void onComplete(@NonNull Task<void> task) { if (task.isSuccessful()) { Log.d(TAG, "Recaptcha Enterprise Initialization successful."); } else { Log.w(TAG, "Recaptcha Enterprise Initialization failed."); } } });
iOS
iOS SDK バージョン 11.6.0 以降に更新します。iOS SDK をアプリと統合すると、SDK は reCAPTCHA 構成を自動的に取得し、構成したプロバイダの保護を有効にします。
reCAPTCHA iOS SDK をアプリに統合するには、環境を準備するをご覧ください。
リンカーフラグに
-ObjC
が一覧表示されていることを確認します。[Target] > [Build Settings] > [All] > [Linking] に移動し、Other Linker Flags
に-ObjC
が表示されていることを確認します。必要に応じて、次のように reCAPTCHA シグナルを強制的に取得できます。
- Swift:
// Initialize Firebase Authentication try await Auth.auth().initializeRecaptchaConfig()
- Objective-C:
// Initialize Firebase Authentication [[FIRAuth auth] initializeRecaptchaConfigWithCompletion:^(NSError * _Nullable error) { // Firebase Authentication initialization finished }];
bot 対策のために reCAPTCHA 指標をモニタリングする
reCAPTCHA の適用を適用モードに設定する前に、監査モードを使用して、プロジェクトで出力される reCAPTCHA 指標をモニタリングし、認証フローが保護されていることを確認することをおすすめします。たとえば、これらの指標は、Identity Platform と reCAPTCHA Enterprise API の統合が正しく設定されているかどうかを判断するのに役立ちます。また、ユーザー トラフィックのスコアしきい値を微調整するのにも役立ちます。reCAPTCHA キーのプロビジョニングが失敗するか、必要なサービス アカウントが作成されなかった場合でも、reCAPTCHA 認証の試行は通常どおり成功します。
プロジェクトで Cloud Monitoring に出力される次の指標を調べて、reCAPTCHA 認証が機能していることを確認します。
identitytoolkit.googleapis.com/recaptcha/verdict_count
: reCAPTCHA から返されるさまざまな判定をトラッキングします。identitytoolkit.googleapis.com/recaptcha/token_count
: Identity Platform バックエンドで受信された reCAPTCHA トークンの数とステータスをトラッキングします。identitytoolkit.googleapis.com/recaptcha/risk_scores
: bot 保護スコアの分布を追跡します。
詳細については、reCAPTCHA 指標をモニタリングするをご覧ください。
reCAPTCHA による bot 対策を適用する
アプリが許容できるユーザー トラフィックを受信していることを確認した後、ユーザーを保護するため reCAPTCHA の適用を有効化できます。古いバージョンのアプリを使用しているユーザーを含む、既存のユーザーを中断しないようにします。
メールとパスワードのプロバイダ
プロジェクトまたはテナントのメールアドレスとパスワードの認証フローで reCAPTCHA の適用を有効にするには、Admin SDK を使用して次のコマンドを実行します。
const enforceRequest = {
recaptchaConfig: {
emailPasswordEnforcementState: 'ENFORCE',
}]
}
};
電話プロバイダ
プロジェクトまたはテナントで SMS ベースの認証フローに対して reCAPTCHA の適用を有効にするには、Admin SDK を使用して次のコマンドを実行します。
const enforceRequest = {
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE',
useSmsBotScore: 'true'
}]
}
};
reCAPTCHA による bot 対策を無効にする
メールとパスワードのプロバイダ
メールアドレスとパスワードによる認証フローのボット保護を無効にするには、Admin SDK を使用して次のコマンドを実行します。
const disableRequest = {
recaptchaConfig: {
emailPasswordEnforcementState: 'OFF',
}
};
電話プロバイダ
SMS ベースの認証フローでボット保護を無効にするには、Admin SDK を使用して次のコマンドを実行します。
const disableRequest = {
recaptchaConfig: {
phoneEnforcementState: 'OFF',
useSmsBotScore: 'false'
}
};
Cloud Run functions を使用して reCAPTCHA の判定をオーバーライドする
スコアしきい値を構成するだけでなく、カスタム Cloud Run functions ブロッキング関数を使用して、特定のトークンに対する reCAPTCHA の判定をオーバーライドできます。これは、特定のユーザー ログインに対して reCAPTCHA スコアが低くなる可能性がある一方で、そのユーザーが信頼できるか、他の方法で検証されているため、ログインを完了できる場合に便利です。
reCAPTCHA でブロッキング関数を構成する方法については、ブロッキング Cloud Functions を使用して Firebase Authentication を拡張するをご覧ください。
次のステップ
- SMS ベースの認証フローで reCAPTCHA SMS defense を有効にします。
- 独自の reCAPTCHA キーを使用する方法について説明します。
- reCAPTCHA 指標のモニタリングの詳細を確認する。
- reCAPTCHA について詳しく説明します。