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

时间:2018-01-30 11:11:34

标签: wordpress rest api

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

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

我是否需要使用插件启用REST API访问才能允许远程上传媒体文件?从我读过的内容来看,REST API不在WordPress核心中(我正在运行WordPress 4.9.2),但我无法看到我为API请求设置身份验证的位置?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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

为示例起见,假设base64输出是:“ AAAAAAAAABBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCDDDDDDDDDDD =”。然后,您可以在任何请求的“授权”标头中使用此值:

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/

答案 1 :(得分:0)

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

  1. Cookies身份验证
  2. 基本身份验证
  3. oauth
  4. json网络令牌

不幸的是,所有这些方法都要求您编辑functions.php文件或下载插件。目前无法解决。

我发现快速开始运行此方法的最快方法是使用this plugin。或者,如果您实际上不想将插件put their code安装到主题的functions.php文件中,则可以使用基本身份验证。也许不是一个很好的长期解决方案,但它将帮助您正常运行。

相关问题