將 Identity Platform 與 reCAPTCHA Enterprise API 整合
本文說明如何使用 Identity Platform 整合 reCAPTCHA Enterprise API,為使用者提供更完善的安全性。這項功能可讓應用程式更能抵禦垃圾內容、濫用行為和其他詐欺活動。
整合作業會代您建立 reCAPTCHA Enterprise 評估,以便驗證使用者要求。如需價格資訊,請參閱 reCAPTCHA 定價。
總覽
設定 Identity Platform 與 reCAPTCHA Enterprise API 的整合時,您會啟用 reCAPTCHA 的預設防護功能:reCAPTCHA 機器人防護功能。啟用機器人防護功能後,Identity Platform 會代表您在專案中提供以分數為準的 reCAPTCHA 金鑰。當使用者使用下列任一作業存取您的應用程式或網站時,如果已啟用對應的供應器,用戶端 SDK 就會載入 reCAPTCHA。
供應商 | 作業 | 方法 |
---|---|---|
passwordProvider |
電子郵件和密碼登入 | signInWithPassword |
使用電子郵件地址和密碼註冊 | signUpPassword |
|
電子郵件連結登入 | getOobCode |
|
重設密碼 | getOobCode |
|
phoneProvider |
使用電話號碼註冊或登入 | sendVerificationCode |
多重身分驗證電話號碼註冊 | mfaSmsEnrollment |
|
使用多重驗證的電話號碼登入 | mfaSmsSignIn |
接著,reCAPTCHA 會向 Identity Platform 提供分數,根據您的設定和風險容忍度評估要求的風險。
詳情請參閱「reCAPTCHA 總覽」。
事前準備
根據您要使用 reCAPTCHA 保護的驗證流程類型,請務必設定下列項目:
- 如果是電子郵件/密碼驗證流程,請務必設定使用者的電子郵件登入功能。
針對簡訊驗證流程,請確認您已完成下列至少一項作業:
- 使用者可透過電話號碼登入。
- 適用於網頁、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 機器人防護模式
reCAPTCHA 機器人防範功能有兩種模式可協助保護使用者:稽核和強制執行。這些模式的行為會因識別資訊提供者而異。
電子郵件密碼提供者
在電子郵件/密碼驗證流程中,稽核和強制執行模式的行為如下所示。
稽核模式
將電子郵件密碼強制執行設為稽核模式時,Identity Platform 會在專案中建立一或多個 reCAPTCHA 金鑰,用於評估 Identity Platform API 的流量,且不會封鎖任何要求。使用稽核模式中產生的指標,判斷是否應啟用 reCAPTCHA 強制執行功能。
強制執行模式
將電子郵件密碼強制執行設為強制模式時,Identity Platform 會在專案中建立一或多個 reCAPTCHA 金鑰,用於評估 Identity Platform API 的流量。系統會拒絕不含 reCAPTCHA 權杖的 API 要求。請務必在將所有用戶端遷移至支援 reCAPTCHA 的 SDK 後,才啟用強制執行功能。
電話供應商
在電話驗證流程中,稽核模式和強制執行模式的行為如下所述。
稽核模式
將電話驗證強制執行設為稽核模式時,Identity Platform 會使用 reCAPTCHA 機器人保護機制進行應用程式驗證。如果使用者要求通過機器人防護評估,身分識別平台就會傳送含有驗證碼的簡訊至使用者的手機。如果要求無法通過機器人防護評估,且您使用的是用戶端 SDK,系統會觸發備用驗證方法,以便完成電話驗證流程。系統接受的備用方法取決於應用程式的平台。
用戶端 SDK 會在下列情況下觸發備用驗證方法:
- 缺少 reCAPTCHA 權杖。
- reCAPTCHA 權杖無效或已過期。
- reCAPTCHA 權杖未通過分數門檻。
- reCAPTCHA 設定不正確。
請確認已為應用程式平台設定備用驗證方法,並準備好在必要時由用戶端 SDK 觸發。
網頁
如果初始的機器人防護評估失敗,稽核模式會使用 reCAPTCHA v2 進行驗證。因此,您必須設定 reCAPTCHA 驗證器 (RecaptchaVerifier
),並將其傳遞至下列電話驗證作業:
verifyPhoneNumber
signInWithPhoneNumber
linkWithPhoneNumber
reauthenticateWithPhoneNumber
auth/argument-error
。如要進一步瞭解如何設定 reCAPTCHA 驗證器,請參閱 Firebase 說明文件中的「設定 reCAPTCHA 驗證器」一文。
Android
如果初始機器人保護評估失敗,稽核模式會根據 Play Integrity API 驗證您的應用程式。如果這項驗證失敗,系統會觸發 reCAPTCHA v2。在下列情況下,系統可能會觸發 reCAPTCHA v2:
- 如果使用者的裝置未安裝 Google Play 服務。
- 如果應用程式並非透過 Google Play 商店發行 (在 Authentication SDK 21.2.0 以上版本)。
- 如果取得的 SafetyNet 權杖無效 (在 Authentication SDK 21.2.0 以下版本)。
iOS
如果初始的機器人防護評估失敗,稽核模式會使用靜默推播通知進行驗證。這個驗證方法會透過靜默推送通知,將權杖傳送至要求裝置上的應用程式。如果應用程式成功收到通知,手機驗證流程就會繼續。如果應用程式未收到推送通知,系統會觸發 reCAPTCHA v2。如果未正確設定靜默推送通知,系統可能會觸發 reCAPTCHA v2。
如要進一步瞭解如何設定 iOS 應用程式驗證,請參閱 Firebase 說明文件中的「啟用應用程式驗證」一文。
強制執行模式
將電話驗證強制執行設為強制模式時,Identity Platform 會使用 reCAPTCHA 機器人防護功能進行應用程式驗證。如果使用者要求通過機器人防護評估,身分識別平台就會傳送含有驗證碼的簡訊至使用者的手機。如果要求未通過機器人防護評估,Identity Platform 會封鎖要求,且不會傳送內含驗證碼的簡訊。
強制模式不需要備用驗證機制,因此您不必為應用程式設定任何額外的驗證方法。不過,如果您決定將應用程式的 reCAPTCHA 模式變更為 AUDIT
或 OFF
,建議您為網頁應用程式設定 reCAPTCHA 驗證器,以確保啟用 reCAPTCHA v2。
設定 Identity Platform 與 reCAPTCHA Enterprise API 的整合
如要設定 Identity Platform 與 reCAPTCHA Enterprise API 的整合,請執行下列工作:
- 使用 Admin SDK 設定 reCAPTCHA 執行狀態,並啟用機器人防護功能。
- 為應用程式平台設定用戶端 SDK。
建議您先在稽核模式中啟用 reCAPTCHA 強制執行功能,並監控專案產生的 reCAPTCHA 指標,確保驗證流程受到妥善保護。這樣一來,您就能在稽核使用者使用 reCAPTCHA 的情況下,不中斷使用者流量。驗證驗證流程是否受到保護後,請將機器人防護設為 ENFORCE
。
啟用 reCAPTCHA 機器人防護功能
電子郵件密碼提供者
如要為電子郵件/密碼驗證流程啟用 reCAPTCHA 機器人防護功能,請按照下列步驟操作:
如果您尚未在專案中啟用 reCAPTCHA Enterprise API,請先完成這項作業。
如要為專案啟用機器人防護功能,請使用 Admin SDK。Node.js Admin SDK 11.7.0 以上版本支援 reCAPTCHA。
例如:
// 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 機器人防護模式」。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 指標以防機器人攻擊,確保流程受到保護。
電話供應商
如要為簡訊驗證流程啟用 reCAPTCHA 機器人防範功能,請按照下列步驟操作:
如果您尚未在專案中啟用 reCAPTCHA Enterprise API,請先完成這項作業。
如要為專案啟用機器人防護功能,請使用管理員 SDK。Node.js 管理員 SDK 12.7.0 以上版本支援 reCAPTCHA。
例如:
// 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
。如要為以簡訊為基礎的流程啟用機器人防護功能,請務必將這個參數設為AUDIT
或ENFORCE
,並將useSmsBotScore
設為true
。首次啟用機器人保護功能時,建議您將此參數設為
AUDIT
,並確保驗證流程受到保護,然後再將此參數設為ENFORCE
。如要進一步瞭解模式的運作方式,請參閱「reCAPTCHA 機器人防護模式」。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。
- JavaScript SDK 9.20.0 以上版本支援在網頁應用程式中使用 reCAPTCHA 進行電子郵件和密碼驗證。
- JavaScript SDK 11 以上版本支援在網頁應用程式中使用 reCAPTCHA 進行電話驗證。
將網路 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 }];
監控 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
:追蹤機器人防護分數分布情形。
詳情請參閱「監控 reCAPTCHA 指標」。
強制執行 reCAPTCHA 機器人防護功能
確認應用程式收到可接受的使用者流量後,您就可以啟用 reCAPTCHA 強制執行功能來保護使用者。請務必確保不會影響現有使用者,包括可能使用舊版應用程式的使用者。
電子郵件密碼提供者
如要在專案或租用戶上啟用電子郵件密碼驗證流程的 reCAPTCHA 強制執行功能,請使用 Admin SDK 執行下列操作:
const enforceRequest = {
recaptchaConfig: {
emailPasswordEnforcementState: 'ENFORCE',
}]
}
};
電話供應商
如要在專案或租用戶上啟用 reCAPTCHA 強制執行功能,以便針對簡訊驗證流程執行 reCAPTCHA,請使用 Admin SDK 執行下列操作:
const enforceRequest = {
recaptchaConfig: {
phoneEnforcementState: 'ENFORCE',
useSmsBotScore: 'true'
}]
}
};
停用 reCAPTCHA 機器人防護功能
電子郵件密碼提供者
如要停用電子郵件/密碼驗證流程的機器人保護功能,請使用 Admin SDK 執行下列指令:
const disableRequest = {
recaptchaConfig: {
emailPasswordEnforcementState: 'OFF',
}
};
電話供應商
如要停用以 SMS 為基礎的驗證流程的機器人防護功能,請使用 Admin SDK 執行下列指令:
const disableRequest = {
recaptchaConfig: {
phoneEnforcementState: 'OFF',
useSmsBotScore: 'false'
}
};
使用 Cloud Run 函式覆寫 reCAPTCHA 判定結果
除了設定分數門檻之外,您還可以使用自訂 Cloud Run 函式封鎖函式,覆寫特定符記的 reCAPTCHA 判定結果。在某些使用者登入時,reCAPTCHA 評分可能偏低,但使用者是可信任的,或已透過其他方式驗證,因此可完成登入程序,這時這項功能就很有幫助。
如要進一步瞭解如何使用 reCAPTCHA 設定封鎖函式,請參閱「透過封鎖式 Cloud Functions 擴充 Firebase 驗證」。
後續步驟
- 為簡訊驗證流程啟用 reCAPTCHA SMS defense。
- 瞭解如何使用自己的 reCAPTCHA 金鑰。
- 進一步瞭解如何監控 reCAPTCHA 指標。
- 進一步瞭解 reCAPTCHA。