啟用、停用及使用密碼政策
本文說明如何設定密碼政策,提高新舊使用者的密碼強度。
總覽
你可以透過密碼政策強制規定密碼複雜度,提高帳戶安全性。密碼規則支援下列密碼規定:
- 須有小寫字元
- 須有大寫字元
- 必須包含數字字元
- 須有非英數字元
- 密碼長度下限 (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.