WordPress REST API - 如何在没有插件的情况下进行身份验证

Posted

技术标签:

【中文标题】WordPress REST API - 如何在没有插件的情况下进行身份验证【英文标题】:WordPress REST API - How to Authenticate without a plugin 【发布时间】:2018-01-30 11:11:34 【问题描述】:

我已经使用 WooCommerce REST API 多年,现在我需要尝试将一些媒体文件上传到 WordPress,以便我们在将产品图像添加到现有产品时引用这些文件,因为 WooCommerce REST API 没有允许直接上传图像文件。我还没有任何 WordPress REST API 实现的经验。

在这个阶段我很困惑是否需要使用 WordPress 插件来允许我的远程应用程序(使用 cURL)能够将文件上传到媒体端点?我看到了一些关于不使用基本身份验证的信息,但我看不到 WordPress 本身的任何设置来创建 API 密钥,就像你为 WooCommerce 所做的那样。

我是否需要使用插件来启用 REST API 访问以允许远程上传媒体文件?根据我的阅读,REST API 不在 WordPress 核心中(我正在运行 WordPress 4.9.2),但我看不到我在哪里为 API 请求设置身份验证?

【问题讨论】:

你只需要一个插件来允许在服务器上进行外部身份验证,其余的在核心developer.wordpress.org/rest-api/using-the-rest-api/… 【参考方案1】:

有不同的身份验证方案,对于远程应用程序/集成,您通常需要一个插件来进行身份验证。

默认想法是登录 WordPress(例如 wp-login.php)并授权该用户使用可能需要它的任何 REST API 功能。一个适用的示例用例是一个插件,它在管理仪表板中添加一个页面,并且它与服务器的来回是通过 JS + REST API 实现的。不需要额外的插件或任何类似的东西,尤其是现在 REST API 是核心的一部分。

对于集成,目前不错的选项包括 OAuth 插件、JWT 和应用程序密码插件。

由于您使用 CURL 并临时加载数据,因此应用程序密码插件可能是一个非常简单且易于管理的选择。一旦插件安装+激活,给定用户,您可以编辑他们的个人资料并添加一个或多个应用程序密码(并禁用它们)。这个想法是您对要作为该用户进行身份验证的每个应用程序使用不同的密码。

要使用应用程序密码,请对“USERNAME:APPLICATION_PASSWORD”进行 base64 编码,然后将生成的值与任何请求一起合并到 Authorization 标头中。

假设您为 username 创建了一个应用程序密码,并且插件生成“WXYZ WXYZ WXYZ WXYZ WXYZ WXYZ”。在 shell 提示下,您可以生成所需的 base64 编码格式:

echo -n "username:WXYZ WXYZ WXYZ WXYZ WXYZ WXYZ" | base64

为了举例,假设 base64 输出是:“AAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCCCCDDDDDDDDDDD=”。然后,您可以在任何请求的 Authorization 标头中使用此值:

curl --header "Authorization: Basic AAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCCCCDDDDDDDDDDD=" -X POST -d "title=Editing a Post Title with REST API" https://example.com.test/wp-json/wp/v2/posts/<ID>

使用 SSL/TLS 很重要,因为如果授权标头是通过明文传输的,则攻击者可以嗅出它。

插件链接:

https://wordpress.org/plugins/application-passwords/

【讨论】:

【参考方案2】:

所以according to wordpress 他们说有 4 种验证方式。

    Cookie 授权 基本认证 oauth json 网络令牌

不幸的是,所有这些方法都需要您编辑 functions.php 文件或下载插件。目前没有办法解决这个问题。

我发现快速运行此程序的最快方法是使用this plugin。或者,如果您实际上不想安装插件,只需将 put their code 安装到主题的 functions.php 文件中,基本身份验证应该可以使用了。也许不是一个很好的长期解决方案,但它会让你启动并运行。

【讨论】:

以上是关于WordPress REST API - 如何在没有插件的情况下进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Wordpress Rest Api 获取当前登录用户?

如何在 Wordpress rest_api_init 回调函数中传递参数

如何使用 WordPress REST API v2 搜索帖子?

如何将 Handsontable 数据发布到 WordPress REST API?

如何通过wordpress rest api重置用户密码

如何使用 WordPress REST api 返回某个月份的所有帖子