啟用、停用及使用密碼政策

本文說明如何使用密碼政策,提高新使用者和現有使用者的密碼強度。

總覽

您可以透過密碼政策強制規定密碼複雜度,提高帳戶安全性。密碼規則支援下列密碼規定:

  • 須有小寫字元
  • 須使用大寫字元
  • 須有數字字元
  • 須有非英數字元
  • 密碼長度下限 (範圍為 6 到 30 個字元,預設為 6)
  • 密碼長度上限 (長度上限為 4096 個半形字元)

如有設定,下列字元可滿足非英數字元的字元規定:

^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ `

事前準備

強制執行模式

您可以啟用密碼政策強制執行模式,有兩種模式可供選擇:

  • 強制執行:使用者如未改用符合政策的密碼,就無法註冊。
  • 通知:使用者可以使用不符合規定的密碼註冊。系統會傳回不符合政策規定的所有缺少條件。傳回的條件包括:

    • 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,即可在通知模式中啟用強制執行功能。

啟用強制執行

如要強制執行密碼政策,請按照下列步驟操作:

  1. 如果尚未設定,請先設定電子郵件和密碼登入
  2. 如要在專案層級強制執行密碼政策,請執行下列指令:

    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:密碼的最大長度
  3. 如要在租用戶層級強制執行密碼政策,請執行下列指令:

    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,
        },
      },
    })
    

停用強制執行

  1. 如要在專案層級停用密碼政策強制執行功能,請執行下列指令:

    import { getAuth } from 'firebase-admin/auth';
    
    // Update project config with password policy config
    getAuth().projectConfigManager().updateProjectConfig({
      passwordPolicyConfig: {
        enforcementState: 'OFF',
      },
    })
    
  2. 如要停用租用戶層級的密碼政策強制執行機制,請執行下列指令:

    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.