即使以管理员身份也无法使用/wp-json/wp/v2/plugins API终结点

时间:2020-09-11 作者:William McVey

以管理员身份使用基本身份验证时,我得到一个错误代码401 Unauthorized : [rest_cannot_view_plugins] Sorry, you are not allowed to manage plugins for this site. 尝试访问GET时出错/wp-json/wp/v2/plugins 我的服务器的终结点。我可以毫无问题地获取帖子和页面信息,但当我查询插件时,我得到了401错误。我已经确认,API调用中使用的用户ID应该能够使用CLI工具管理插件:

#  wp user list-caps $USER | grep plugin
activate_plugins
edit_plugins
update_plugins
delete_plugins
install_plugins
任何指点都将不胜感激。

1 个回复
最合适的回答,由SO网友:Adam 整理而成

建议如下:

首先确保您运行的是WordPress版本5.5.* 由于此版本添加了/wp/v2/plugins 请参见:New and modified REST API endpoints in WordPress 5.5

  • 使用基本身份验证,使用curl按照以下要求发出请求
    curl --user username:password https://example.com/wp-json
    
    不管怎样,第一个请求都应该成功,因为它很可能是不安全的(除非您另有规定)。

    然后尝试:

    curl --user username:password https://example.com/wp-json/wp/v2/plugins
    
    如果此操作失败,您可能无法发出基本身份验证请求,因此请将其添加到测试中。

    安装以下组件:

    https://github.com/WP-API/Basic-Auth/blob/master/basic-auth.php

    我只建议将该文件放在您的网站上wp-content/mu-plugins 目录如果目录不存在,请先创建它。

    然后重复curl请求:

    curl --user username:password https://example.com/wp-json/wp/v2/plugins
    
    如果您正确地进行了身份验证,您应该会收到一个适用于该端点的响应。

    测试我通过首次尝试安装来测试这一点5.3.* 而且路由不存在(正如我们所预料的那样)

  • 我已经在一个安装上测试过了5.5.* 该路由确实如预期的那样存在,但需要一种身份验证方法(对于测试,我使用了基本身份验证),您可以在此处了解有关身份验证方法的更多信息:https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
  • 注意(关于身份验证):

    根据您试图实现的目标,您可能会受益于更强大的身份验证,如OAuth或应用程序密码(请参阅https://wordpress.org/plugins/application-passwords/) 但在这里,最终由您选择,基本身份验证可能就足够了,但请注意为发出请求的给定用户存储纯文本用户名和密码的安全考虑。如果依赖基本身份验证,您可能希望创建具有足够权限/功能的特定用途。

    有用的阅读: