web-dev-qa-db-ja.com

WordPress Rest API:カスタムAPIキーで検証するにはどうすればよいですか?

WordPressの "エンドポイント"関数を "ヘッダー認証をキャンセルする"でどのように検証できるか(WordPress $ ===は、生成したAPIキーを使用します。(注:別のエンドポイントではなく、元のエンドポイント))

私は自分の「暗号」クラス/機能を持っています。リクエストでは、暗号化されたキーを送信し、「wp-function」などから「暗号化されたキー」を「復号」して、リクエストを許可する必要があります。

wordpress独自のエンドポイントライブラリでこれをすべて実行できるようにする必要があります。

私のクエリ構造の簡単な例:

$.ajax({
  type: "POST",
  url: "http://localhost/workspace/wordpress/wp-json/wp/v2/posts?request=<?php echo $encrypted; ?>",
  dataType: "json"
});

[〜#〜] php [〜#〜]

<?php echo $encrypted; ?>
<?php // "z0/8Q6cuMWBlZGzfTwOVi9HwCpKThN9Ju/o/MywK74vimB467vjGfKqoDVQdyKIdmXCxxE=" ?>

functions.phpまたはe.g. PHPページ:復号化後

<?php echo $decrypted; ?>
<?php // "Secret Password" ?>
<?php // I will verify my key, and to let

enter image description here

enter image description here

2
Bilwo
function checkApiAuth( $result ){

    $yourEncryptAPIKey = $_GET['request'];

    if( yourDecryptFn( $yourEncryptAPIKey ) === $realKey ):
        $result = true;

    else:
        $result = false;

    endif;

    return $result;           
}
add_filter('rest_authentication_errors', 'checkApiAuth');
1
BOZ

rest_authentication_errors フィルターを使用できるように聞こえます:

これは、認証メソッドからAPIに WP_Error を渡すために使用されます。

[...]フックされた認証方法が実際に試行されていない場合、nullが返されます[...]。同様に、コールバックは、エラーをチェックする前に値がnullであることを確認する必要があります。

WP_Error エラーが発生した場合、インスタンスを返すことができます[...]。コールバックはtrueを返し、認証方法が使用され、成功したことを示すことができます。

コード例については、WPが wp-includes/restのX-WP-Nonceヘッダーのカスタムチェックを実装した方法をご覧ください。 -api.php807行目以降

(関数rest_cookie_check_errors優先度100のrest_authentication_errorsフィルターに追加されます 。)

0
kero