啟用、停用及使用密碼政策
本文說明如何使用密碼政策,提高新使用者和現有使用者的密碼強度。
總覽
您可以透過密碼政策強制規定密碼複雜度,提高帳戶安全性。密碼規則支援下列密碼規定:
- 須有小寫字元
- 須使用大寫字元
- 須有數字字元
- 須有非英數字元
- 密碼長度下限 (範圍為 6 到 30 個字元,預設為 6)
- 密碼長度上限 (長度上限為 4096 個半形字元)
如有設定,下列字元可滿足非英數字元的字元規定:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ `
事前準備
- 安裝 Admin SDK
強制執行模式
您可以啟用密碼政策強制執行模式,有兩種模式可供選擇:
- 強制執行:使用者如未改用符合政策的密碼,就無法註冊。
通知:使用者可以使用不符合規定的密碼註冊。系統會傳回不符合政策規定的所有缺少條件。傳回的條件包括:
MISSING_LOWERCASE_CHARACTER
MISSING_UPPERCASE_CHARACTER
MISSING_NUMERIC_CHARACTER
MISSING_NON_ALPHANUMERIC_CHARACTER
MINIMUM_PASSWORD_LENGTH
MAXIMUM_PASSWORD_LENGTH
您可以將這項資訊傳送給使用者,通知他們更新密碼。以下範例顯示回應內容,其中包含缺少密碼條件:
{ "kind": "identitytoolkit#VerifyPasswordResponse", "localId": "CJL1i2", "email": "cloudysanfrancisco@gmail.com", "displayName": "", "idToken": "ID_TOKEN", "registered": true, "userNotifications": [ { "notificationCode": "MISSING_NUMERIC_CHARACTER", "notificationMessage": "Password must contain a numeric character" }, { "notificationCode": "MISSING_NON_ALPHANUMERIC_CHARACTER", "notificationMessage": "Password must contain a non-alphanumeric character" } ] }
新使用者必須選擇符合政策規定的密碼。如果您有活躍使用者,建議您不要啟用登入時強制升級功能,除非您打算立即強制執行密碼政策。請改用通知模式,讓使用者可以使用目前的密碼登入,並傳送通知,詳細說明密碼缺少哪些規定。
啟用強制執行功能時,請將 forceUpgradeOnSignin
設為 true
,以便在強制模式下啟用強制執行功能。將其設為 false
,即可在通知模式中啟用強制執行功能。
啟用強制執行
如要強制執行密碼政策,請按照下列步驟操作:
- 如果尚未設定,請先設定電子郵件和密碼登入。
如要在專案層級強制執行密碼政策,請執行下列指令:
import { getAuth } from 'firebase-admin/auth'; // Update project config with password policy config getAuth().projectConfigManager().updateProjectConfig({ passwordPolicyConfig: { enforcementState: 'ENFORCE', forceUpgradeOnSignin: true, constraints: { requireUppercase: true, requireLowercase: true, requireNonAlphanumeric: true, requireNumeric: true, minLength: MIN_PASSWORD_LENGTH, maxLength: MAX_PASSWORD_LENGTH, }, }, })
更改下列內容:
MIN_PASSWORD_LENGTH
:密碼最小長度MAX_PASSWORD_LENGTH
:密碼的最大長度
如要在租用戶層級強制執行密碼政策,請執行下列指令:
import { getAuth } from 'firebase-admin/auth'; // Update project config with password policy config getAuth().tenantManager().createTenant({ displayName: "admin-tenant", passwordPolicyConfig: { enforcementState: 'ENFORCE', forceUpgradeOnSignin: true, constraints: { requireUppercase: true, requireLowercase: true, requireNonAlphanumeric: true, requireNumeric: true, minLength: MIN_PASSWORD_LENGTH, maxLength: MAX_PASSWORD_LENGTH, }, }, })
停用強制執行
如要在專案層級停用密碼政策強制執行功能,請執行下列指令:
import { getAuth } from 'firebase-admin/auth'; // Update project config with password policy config getAuth().projectConfigManager().updateProjectConfig({ passwordPolicyConfig: { enforcementState: 'OFF', }, })
如要停用租用戶層級的密碼政策強制執行機制,請執行下列指令:
import { getAuth } from 'firebase-admin/auth'; // Update tenant config with password policy config getAuth().tenantManager().updateTenant(TENANT-ID, { passwordPolicyConfig: { enforcementState: 'OFF', }, })
將
TENANT-ID
替換為您要停用密碼政策的租用戶 ID。
在用戶端上強制執行
在提交前,您可以根據專案或租用戶的密碼政策,驗證用戶端的密碼。
import { getAuth, validatePassword } from 'firebase/auth';
const auth = getAuth();
auth.tenantId = TENANT-ID;
const status = await validatePassword(auth, 'password').catch((error) => {
// Password could not be validated.
});
const policy = status.passwordPolicy;
// Use the status and policy to show what requirements are met and which are missing.