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

本文說明如何設定密碼政策,提高新舊使用者的密碼強度。

如要透過 Firebase 控制台設定密碼政策,請參閱「設定密碼政策」。

總覽

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

  • 須有小寫字元
  • 須有大寫字元
  • 必須包含數字字元
  • 必須包含非英數字元
  • 密碼長度下限 (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. 如要在專案層級強制執行密碼政策,請按照下列步驟操作:

    Firebase 控制台

    1. 前往 Firebase 控制台的「Authentication Settings」(驗證設定) 頁面。

      前往「驗證設定」

    2. 選取「密碼政策」分頁標籤。

    3. 設定所選密碼強度規定。

    4. 選擇強制執行模式 (「Require」或「Notify」),以及是否要在登入時強制升級密碼。

    5. 按一下 [儲存]

    REST

    1. 在 Google Cloud 主控台中,使用 gcloud auth print-access-token 指令列印專案 ID 的存取權杖

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. 使用 Identity Toolkit API 啟用密碼政策:

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'ENFORCE','forceUpgradeOnSignin':true,'constraints':{'requireUppercase':true,'requireLowercase':true,'requireNonAlphanumeric':true,'requireNumeric':true,'minLength':MIN_PASSWORD_LENGTH,'maxLength':MAX_PASSWORD_LENGTH}}}" \
          -H 'Authorization: Bearer ACCESS_TOKEN' \
          -H 'Content-Type: application/json' \
          -H 'X-Goog-User-Project: PROJECT_ID' \
          "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=passwordPolicyConfig"
      

      更改下列內容:

      • ACCESS_TOKEN:您先前產生的存取權杖
      • PROJECT_ID:專案 ID
      • MIN_PASSWORD_LENGTH:密碼長度下限
      • MAX_PASSWORD_LENGTH:密碼長度上限
  3. 如要在租戶層級強制執行密碼政策,請按照下列步驟操作:

    REST

    1. 在 Google Cloud 主控台中,使用 gcloud auth print-access-token 指令列印專案 ID 的存取權杖

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. 使用 Identity Toolkit API 為租戶啟用密碼政策:

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'ENFORCE','forceUpgradeOnSignin':true,'constraints':{'requireUppercase':true,'requireLowercase':true,'requireNonAlphanumeric':true,'requireNumeric':true,'minLength':MIN_PASSWORD_LENGTH,'maxLength':MAX_PASSWORD_LENGTH}}}" \
          -H 'Authorization: Bearer ACCESS_TOKEN' \
          -H 'Content-Type: application/json' \
          -H 'X-Goog-User-Project: PROJECT_ID' \
          "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/tenants/TENANT_ID?updateMask=passwordPolicyConfig"
      

      更改下列內容:

      • ACCESS_TOKEN:您先前產生的存取權杖
      • PROJECT_ID:專案 ID
      • TENANT_ID:要強制執行密碼政策的租戶 ID
      • MIN_PASSWORD_LENGTH:密碼長度下限
      • MAX_PASSWORD_LENGTH:密碼長度上限

停用強制執行功能

  1. 如要在專案層級停用密碼政策強制執行功能,請按照下列步驟操作:

    Firebase 控制台

    1. 前往 Firebase 控制台的「Authentication Settings」(驗證設定) 頁面。

      前往「驗證設定」

    2. 選取「密碼政策」分頁標籤。

    3. 停用密碼政策強制執行功能。

    4. 按一下 [儲存]

    REST

    1. 在 Google Cloud 主控台中,使用 gcloud auth print-access-token 指令列印專案 ID 的存取權杖

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. 使用 Identity Toolkit API 停用密碼政策強制執行功能:

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'OFF'}}" \
          -H 'Authorization: Bearer ACCESS_TOKEN' \
          -H 'Content-Type: application/json' \
          -H 'X-Goog-User-Project: PROJECT_ID' \
          "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=passwordPolicyConfig"
      

      更改下列內容:

      • ACCESS_TOKEN:您先前產生的存取權杖
      • PROJECT_ID:專案 ID
  2. 如要在租戶層級停用密碼政策強制執行功能,請按照下列步驟操作:

    REST

    1. 在 Google Cloud 主控台中,使用 gcloud auth print-access-token 指令列印專案 ID 的存取權杖

      gcloud auth print-access-token --project=PROJECT_ID
      
    2. 使用 Identity Toolkit API 為租戶停用密碼政策強制執行功能:

      curl -X PATCH -d "{'passwordPolicyConfig':{'enforcementState':'OFF'}}" \
          -H 'Authorization: Bearer ACCESS_TOKEN' \
          -H 'Content-Type: application/json' \
          -H 'X-Goog-User-Project: PROJECT_ID' \
          "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/tenants/TENANT_ID?updateMask=passwordPolicyConfig"
      

      更改下列內容:

      • ACCESS_TOKEN:您先前產生的存取權杖
      • PROJECT_ID:專案 ID
      • 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 couldn't be validated.
});
const policy = status.passwordPolicy;

// Use the status and policy to show what requirements are met and which are
// missing.