跳到主要内容

密码策略

Logto 会根据密码的创建或更新方式以不同方式应用密码策略:

设置密码策略​

对于新用户或正在更新密码的用户,你可以设置密码策略以强制执行密码强度要求。访问 控制台 > 安全 > 密码策略 配置密码策略设置。

  1. 最小密码长度:设置密码所需的最小字符数。(NIST 建议至少使用 8 个字符)
  2. 最少所需字符类型数:设置密码所需的最少字符类型数。可用的字符类型有:
    1. 大写字母:(A-Z)
    2. 小写字母:(a-z)
    3. 数字:(0-9)
    4. 特殊字符:(!"#$%&'()\*+,-./:;<>=?@[]^\_`|{}~ )
  3. 泄露历史检查:启用此设置可拒绝在数据泄露中已暴露过的密码。(由 Have I Been Pwned 提供支持)
  4. 重复字符检查:启用此设置可拒绝包含重复字符的密码。(例如,“11111111”或“password123”)
  5. 用户信息检查:启用此设置可拒绝包含用户名、邮箱地址或手机号等用户信息的密码。
  6. 自定义词汇:提供你希望在密码中拒绝的自定义词汇列表(不区分大小写)。

密码过期​

密码过期要求用户在设定的天数后重置密码。你也可以手动让某个用户的密码过期,例如当你知道其已被泄露时。

该策略仅在用户通过密码登录并输入正确密码后才会检查。通过验证码、社交登录、SSO 或密钥登录的用户不受影响。

启用密码过期​

前往 控制台 > 安全 > 密码策略,找到 密码过期 卡片:

  1. 打开 启用密码过期。
  2. 设置 密码有效期(天),范围为 1 到 9999 天。
  3. 保存更改。

在登录体验至少有一种忘记密码方式(邮箱或手机)且有可用连接器之前,开关保持禁用状态,因为用户只能通过该流程重置过期密码。出于同样原因,启用策略后,你无法删除支持忘记密码的最后一个邮箱或短信连接器。如果你的注册流程不要求邮箱地址或手机号,部分用户可能无法收到重置码,因此建议在注册时收集其中之一。

Logto 会记录用户密码的最后设置或更改时间。当该密码达到有效期时,用户下次通过密码登录会被阻止,直到他们重置密码。没有记录密码更改日期的用户,从你启用策略的时间开始计算,因此启用策略不会让所有用户的密码同时过期。关闭再重新开启策略会重置起始时间。

当用户通过忘记密码、Account API 或 Management API 设置新密码时,密码年龄会重置,任何手动过期状态也会被清除。

手动让用户密码过期​

启用密码过期策略后,你可以强制某个用户在下次登录时重置密码:

如果策略未启用,API 会返回 400,错误码为 sign_in_experiences.password_expiration_not_enabled,控制台中的 过期 按钮也会被禁用。

常见场景是密码已知被泄露。让其过期后,用户需通过验证码证明其拥有邮箱或手机号,才能设置新密码并重新登录。如果你只想手动让密码过期,而不想强制所有用户定期轮换密码,可以将有效期设置为较长时间,例如 3650 天。

让密码过期不会使用户现有会话退出。若需立即切断访问,还需撤销用户的活跃会话和已授权的第三方应用。

终端用户看到的内容​

当用户使用过期密码登录时,在输入正确密码后,登录页面会弹出提示:“你的密码已过期,必须重置后才能登录。”点击 重置密码 会将用户带到忘记密码流程,并自动填充其标识符。用户通过邮箱或手机收到验证码并设置新密码后,即可重新登录。

如果你使用 体验 API 自定义登录界面,密码验证请求会以错误码 password.expired(HTTP 422)失败。你需要处理该错误,将用户引导至密码重置流程。

密码合规性检查​

在你更新 Logto 中的密码策略后,现有用户仍可使用当前密码登录。只有新创建的账户才会被要求遵循更新后的策略。

为提升安全性,你可以使用 POST /api/sign-in-exp/default/check-password API 检查用户密码是否符合默认登录体验下定义的当前策略。如果不符合,你可以通过自定义流程和 Account API 提示用户更新密码。

管理用户 注册与登录 通过 Account API 进行账户设置 设计你的密码策略