启用、停用和使用密码政策
本文档介绍如何设置密码政策,以提高新用户和现有用户的密码强度。
如果您想通过 Firebase 控制台设置密码政策,请参阅设置 密码政策。
概览
借助密码政策,您可以强制实施密码复杂度要求,从而提高账号安全性。密码政策支持以下密码要求:
- 必须包含小写字符
- 必须包含大写字符
- 必须包含数字字符
- 必须包含非字母数字字符
- 最小密码长度(介于 6 到 30 个字符之间;默认为 6)
- 最大密码长度(上限为 4096 个字符)
如果配置了以下字符,则这些字符符合非字母数字字符要求:
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ `
强制执行模式
您可以通过两种模式启用密码政策强制执行:
- 要求:尝试登录会失败,直到用户将密码更新为符合您的政策的密码。
通知:允许用户使用不符合要求的密码登录。系统会返回所有未达标的条件(达标后才能满足政策要求)。返回的条件包括:
MISSING_LOWERCASE_CHARACTERMISSING_UPPERCASE_CHARACTERMISSING_NUMERIC_CHARACTERMISSING_NON_ALPHANUMERIC_CHARACTERMINIMUM_PASSWORD_LENGTHMAXIMUM_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,以在通知模式下启用强制执行。
启用违规处置
如需强制执行密码政策,请按以下步骤操作:
- 如果您尚未配置电子邮件地址和密码 登录,请执行此操作。
如需在项目级层强制执行密码政策,请按以下步骤操作:
Firebase 控制台
在 Firebase 控制台中,前往身份验证设置 页面。
选择密码政策 标签页。
配置您选择的密码强度要求。
选择强制执行模式(要求 或通知 ),以及是否在登录时强制升级密码。
点击保存 。
REST
在 Google Cloud 控制台中,使用
gcloud auth print-access-token命令为您的项目 ID 输出访问令牌:gcloud auth print-access-token --project=PROJECT_ID使用 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:您的项目 IDMIN_PASSWORD_LENGTH:要求的最小密码长度MAX_PASSWORD_LENGTH:要求的最大密码长度
如需在租户级层强制执行密码政策,请按以下步骤操作:
REST
在 Google Cloud 控制台中,使用
gcloud auth print-access-token命令为您的项目 ID 输出访问令牌:gcloud auth print-access-token --project=PROJECT_ID使用 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:您的项目 IDTENANT_ID:您要强制执行密码政策的租户的 IDMIN_PASSWORD_LENGTH:要求的最小密码长度MAX_PASSWORD_LENGTH:要求的最大密码长度
停用强制执行
如需在项目级层停用密码政策强制执行,请按以下步骤操作:
Firebase 控制台
在 Firebase 控制台中,前往身份验证设置 页面。
选择密码政策 标签页。
停用密码政策强制执行。
点击保存 。
REST
在 Google Cloud 控制台中,使用
gcloud auth print-access-token命令为您的项目 ID 输出访问令牌:gcloud auth print-access-token --project=PROJECT_ID使用 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
如需在租户级层停用密码政策强制执行,请按以下步骤操作:
REST
在 Google Cloud 控制台中,使用
gcloud auth print-access-token命令为您的项目 ID 输出访问令牌:gcloud auth print-access-token --project=PROJECT_ID使用 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:您的项目 IDTENANT_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.