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

本文档介绍了如何使用密码政策为新用户和现有用户提高密码强度。

概览

借助密码政策,您可以通过强制执行密码复杂度要求来提高帐号安全性。密码政策支持以下密码要求:

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