应用密码是 WordPress 的一项功能,允许您为程序化访问(例如移动应用程序、集成或脚本)生成可撤销的、针对特定应用程序的凭据。它们旨在避免将您的主账户密码与第三方工具共享。

应用密码是在 WordPress 5.6(2020 年 12 月)中引入的。参见:应用密码:集成指南。

什么是应用密码?

应用密码是:

  • 与特定的 WordPress 用户账户绑定的密码。
  • 旨在用于 API 身份验证(例如,WordPress REST API 和(如果启用)XML-RPC),而不是用于交互式浏览器登录。
  • 在 WordPress 中以哈希形式存储,并且仅在创建时显示一次。
  • 可以单独撤销,因此您可以禁用单个集成而无需更改用户的主密码。

应用密码不能用于通过 wp-login.php 登录 wp-admin。它们是为应用程序和脚本设计的,而不是为在登录表单中输入凭据的人类设计的。

何时使用应用密码

当您需要一个工具以 WordPress 用户的身份进行身份验证,而无需提供该用户的主密码时,请使用应用密码,例如:

  • 需要调用 REST API 的部署/维护脚本。
  • 向 WordPress 发布内容或上传媒体内容的第三方服务。
  • 需要对其网站 API 进行身份验证访问的桌面/移动客户端。

如果使用场景是浏览器中的交互式登录,请使用强密码并考虑启用两步身份验证(也称为双因素身份验证或 2FA):两步身份验证。

在 wp-admin 中创建应用密码

  1. 作为需要凭据的用户(或编辑该用户的管理员)登录 wp-admin。
  2. 前往用户 → 个人资料(或用户 → 所有用户 → 编辑以编辑其他用户)。
  3. 找到应用密码部分。
  4. 输入描述性名称(例如:CI deploy bot、My iPhone app、Reporting integration)。
  5. 生成密码并立即复制/存储它(它将不再显示)。

WordPress 以分组块的形式显示应用密码以提高可读性。它们可以带空格或不带空格使用(验证前会删除空格)。

使用应用密码

应用密码通常通过 HTTP Basic Authentication (RFC 7617) 使用。在使用 Basic Auth 时,您的客户端在 Authorization HTTP 标头中发送凭据。

标头值是通过 Base64 编码字符串 username:password 构建的:

Authorization: Basic BASE64_ENCODED_CREDENTIALS

使用应用密码时:

  • 用户名:WordPress 用户名(登录名)。
  • 密码:生成的应用密码。

由于 Basic Auth 凭据如果在网络中未加密发送可能会被拦截,您应该始终使用 HTTPS。参见:HTTPS。

示例(带有 curl 的 REST API 请求):

curl --user "USERNAME:APPLICATION_PASSWORD" https://example.com/wp-json/wp/v2/users/me

管理和轮换应用密码

在用户个人资料上的同一应用密码部分,您可以:

  • 查看现有的应用密码(按名称)。
  • 查看使用元数据(例如,最后使用时间/最后 IP)。
  • 撤销单个密码。

操作最佳实践是将应用密码视为秘密:

  • 为每个集成/应用程序创建一个(不要跨工具重用)。
  • 撤销不再需要的任何凭据。
  • 按计划或在任何疑似泄露后轮换凭据。

使用 WP-CLI 管理应用密码

如果您通过 SSH 管理 WordPress,WP-CLI 可以创建、列出、更新和撤销应用密码。

示例:

# Create an application password for user ID 123 (prints the password once).
wp user application-password create 123 "myapp"

# Create and output just the password for user ID 123 (useful for scripts/CI).
wp user application-password create 123 "myapp" --porcelain

# List passwords for user ID 123 and show common fields.
wp user application-password list 123 --fields=uuid,name,created,last_used,last_ip

# Delete a specific application password by UUID for user ID 123.
wp user application-password delete 123 <uuid>

官方命令参考:wp user application-password。

可用性和禁用

默认情况下,当请求通过 HTTPS 提供时,应用密码是可用的。可用性可以通过过滤器进行自定义(或禁用)。

如果您不希望允许在站点上使用应用密码,您可以通过代码(例如,在必用插件中)使用 wp_is_application_passwords_available 过滤器禁用它们。对于更细粒度的控制(例如,仅允许特定用户/角色),请使用 wp_is_application_passwords_available_for_user。

故障排除

如果身份验证失败(401/403)或应用密码未出现在用户个人资料中:

  • 确认 HTTPS:应用密码旨在用于 HTTPS 请求。确保站点正确配置了 TLS,并且 WordPress 将其检测为 HTTPS。参见:HTTPS。
  • 确认您使用的是应用密码:用户的常规密码可能仍然需要用于交互式登录;应用密码是单独的。
  • 检查是否禁用了该功能:安全插件、必用插件或自定义代码可能通过过滤器禁用应用密码。
  • 确认您的客户端发送 Basic Auth:某些 HTTP 客户端和代理可能会剥离 Authorization 标头,除非明确配置。

相关