启用、停用和使用密码政策

本文档介绍如何设置密码政策,以提高新用户和现有用户的密码强度。

如果您想通过 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 控制台中,前往身份验证设置 页面。

      前往“身份验证设置”

    2. 选择密码政策 标签页。

    3. 配置您选择的密码强度要求。

    4. 选择强制执行模式(要求通知 ),以及是否在登录时强制升级密码。

    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 控制台中,前往身份验证设置 页面。

      前往“身份验证设置”

    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.