首页 > 解决方案 > 当我的访问应用程序使用 OAuth 1.0a 服务器凭据时,我究竟如何获得自定义 WP REST API 端点来检查授权访问?

问题描述

好的,这是我的问题。我正在构建一个 Laravel 应用程序(5.4),它对我网站的 Wordpress CMS(运行版本 4.9.8)进行 API 调用。

大多数这些 API 调用都是从我构建的自定义端点检索基本 HTML 内容等的不安全请求,这些端点存在于我也在构建的自定义 WP 插件中。这是这些自定义端点之一的示例,调用菜单(通过 slug)缓冲函数,然后将缓冲的 HTML 内容作为 JSON 对象返回。

要访问此不安全的自定义端点,示例 URL 将是

http://example.com/wp-json/custom-api/v1/items/menu/ {menu-slug-goes-here}

插件中断言这个不安全的自定义 API 端点的代码将是......

function get_menu(WP_REST_Request $request) {
    ob_start();
    wp_nav_menu( array('menu' => $request['slug'], 'container' => false));  
    $menu = ob_get_contents();
    ob_end_clean();
    return rest_ensure_response($menu);
}


add_action( 'rest_api_init', function () {
  register_rest_route( 'custom-api/v1/items/', 'menu/(?P<slug>[a-zA-Z-]+)', array(
    'methods' => 'GET',
    'callback' => 'get_menu',
     'args' => array(
          'slug' => array(
            'validate_callback' => function($slug, $request, $key) {
              return is_string( $slug );
            }
          ),
        ),
      ) );
    } );

到目前为止,一切都很好。这个不安全的端点工作正常。

直到我们开始设置需要 Oauth1 身份验证的自定义 API 端点。假设 Laravel 应用程序需要通过安全的自定义 API 端点调用客户数据。

经过几天的研究,我无法弄清楚这一点,所以我想知道是否有人可以给我一些建议?

在我们开始之前,值得注意的是;

  1. 根据 WP API 文档,身份验证主要是通过 cookie 完成的,但是用户需要登录才能发生这种情况?或者可以使用 nonce 发出 AJAX 请求。这是文档的链接;

https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/

  1. 我正在使用 Wordpress REST API - OAuth 1.0a 服务器(下面的链接)插件来管理 Laravel 应用程序的身份验证。这一切都完成了,Laravel 应用程序已获得授权,它有它的消费者密钥、秘密和永久令牌,并且这些已经过测试并且能够访问 WP 的安全烘焙 API 端点,例如 /wp/v2/settings

https://wordpress.org/plugins/rest-api-oauth1/

  1. Wordpress API 声明您可以结合使用 'permission_callback' 功能和 'current_user_can' 方法来检查身份验证(这里是 WP 的官方示例)

    add_action( 'rest_api_init', function () {
    register_rest_route( 'myplugin/v1', '/author/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'my_awesome_func',
    'args' => array(
      'id' => array(
        'validate_callback' => 'is_numeric'
      ),
    ),
    'permission_callback' => function () {
      return current_user_can( 'edit_others_posts' );
     }
     ) );
    } );
    

所以我的问题是……

A) 是否可以创建一个需要并在自定义端点检查 Oauth1 凭据的函数?

B)如果没有,应用程序能否找到一种方法来提供其作为用户的状态,然后从那里调用“current_user_can”?

C)或者他们的另一个解决方案是我完全想念的???

非常感谢您的帮助,感谢所有建设性和善意的建议!

标签: phpwordpressoauthwordpress-rest-api

解决方案


推荐阅读