WP REST API如何检查标头基本身份验证

时间:2018-04-29 03:59:34

标签: wordpress api

像这样的自定义端点

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

在标题中使用基本身份验证,请说“授权:基本some64basePass&#39;

如何检查标题中Authorization的值是否有效?

2 个答案:

答案 0 :(得分:1)

WordPress有一个用于添加自己的身份验证处理程序的钩子。

add_filter( 'rest_authentication_errors', 'rest_basic_auth_check_errors', 99 );

如果基本身份验证成功,则rest_basic_auth_check_errors()应返回true;如果失败则返回WP_Error。由于默认的REST身份验证处理程序以优先级100运行,因此rest_basic_auth_check_errors()将覆盖默认处理程序。

请参阅文件中的函数WP_REST_Server :: check_authentication()... \ wp-includes \ rest-api \ class -wp-rest-server.php以了解WordPress如何处理REST身份验证以及如何添加自己的身份验证处理程序

此外,您应该阅读http://php.net/manual/en/features.http-auth.php

中的$ _SERVER [&#39; PHP_AUTH_USER&#39;]和$ _SERVER [&#39; PHP_AUTH_PW&#39;]

答案 1 :(得分:0)

这是我的解决方案。 在回调函数内部,我从标题中验证Authorization,如下所示:

function my_awesome_func($data) {
    //Get HTTP request headers 
    $auth = apache_request_headers();
    //Get only Authorization header
    $valid = $auth['Authorization'];

    // Validate
    if ($valid == 'Basic Base64UsernamePassword') {
        //Do what the function should do
    } else {
        $response = 'Please use a valid authentication';
    }

    return json_encode($response);
}

也许有更好的方法。