Как я могу получить пользовательскую конечную точку API REST API для проверки авторизованного доступа, когда мое приложение для доступа использует учетные данные сервера OAuth 1.0a? - PullRequest
0 голосов
/ 11 октября 2018

ОК, так вот моя проблема.Я создаю приложение Laravel (5.4), которое выполняет вызовы API для Wordpress CMS моего сайта (работает под управлением версии 4.9.8).

Большинство этих вызовов 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 );
            }
          ),
        ),
      ) );
    } );

Пока все хорошо.Эта незащищенная конечная точка работает нормально.

Пока мы не приступим к настройке настраиваемой конечной точки API, которая потребовала бы аутентификацию Oauth1.Скажем, возможно, приложению Laravel необходимо вызывать данные клиента через безопасную настраиваемую конечную точку API.

После нескольких дней исследований я не могу понять это, поэтому я подумал, может кто-нибудь предложить мне какой-нибудь совет?

Прежде чем мы начнем, стоит отметить;

  1. Согласно документации WP API, аутентификация в основном выполняется с помощью файлов cookie, но для этого пользователю необходимо войти в систему.случиться?Или запрос AJAX может быть сделан с использованием одноразового номера.Вот ссылка на документы:

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

Я использую Wordpress REST API - плагин OAuth 1.0a Server (ссылка ниже) для управления аутентификацией приложения Laravel.Это все сделано, приложение Laravel авторизовано, у него есть свои потребительские ключи, секреты и постоянные токены, и они были протестированы и имеют доступ к защищенным встроенным конечным точкам API WP, таким как / wp / v2 / settings

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

Wordpress API заявляет, что вы можете использовать функциональные возможности «allow_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) Или это их другое решение, которое мне совершенно не хватает ???

Большое спасибо за вашу помощь, все конструктивные и добродушные советы приветствуются!

...