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

本文档介绍了如何使用密码政策改进密码 。

概览

借助密码政策,您可以强制要求使用密码,从而提高账号安全性 复杂度要求密码政策支持以下密码 要求:

  • 必须使用小写字符
  • 必须使用大写字符
  • 必须提供数字字符
  • 必须为非字母数字字符
  • 最小密码长度(范围为 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.