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

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

概览

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

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