如何对WordPress REST API鉴权访问?

JWT Auth – WordPress JSON Web Token Authentication
JWT Auth – WordPress JSON Web Token Authentication

WordPress REST API除了自带的外,还可以自己创建一个REST API,但是默认的REST API是没有鉴权的,换句话说是可以远程请求的,这样可能导致被恶意使用。

下面讲讲如何给API鉴权。

Token Authentication

Token鉴权是比较常见和流行的方案,WordPress创建JWT Auth可以实现。安装好后需要在.htaccess加入:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

鉴权还需要安全密匙,访问官方的API:secret-key,将第二行:

define('SECURE_AUTH_KEY'

的值复制下来,把

define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');

中的your-top-secret-key替换掉,然后放入wp-config.php中。

在加入跨域请求:

define('JWT_AUTH_CORS_ENABLE', true);

会生成新的API:

/jwt-auth/v1
/wp-json/jwt-auth/v1/token
/wp-json/jwt-auth/v1/token/validate

如何获取Token?

$username = '你的用户名';
$password = '应用密匙'; // 也可以是用户名的真实密码,为了安全,建议使用应用密匙
$jwt          = 'https://example.com/wp-json/jwt-auth/v1/token';
$jwt_args     = array(
  'body'      => array(
    'username' => $username,
    'password' => $password,
  ),
  'sslverify' => false,
);
$jwt_res      = wp_remote_post( $jwt, $jwt_args );
$jwt_res_body = wp_remote_retrieve_body( $jwt_res );
$jwt_result   = json_decode( $jwt_res_body );
$jwt_token    = $jwt_result->data->token;

注:应用密匙怎么创建就不说了,网上教程很多。

请求鉴权后的接口

由于鉴权后接口是无法直接访问的,请求时需要带上token

$res = wp_remote_get('https://example.com/wp-json/user/v1/all',
  array(
    'headers'   => array(
      'Authorization' => 'Bearer ' . $jwt_token,
    ),
    'sslverify' => false,
  )
);
$res_body = json_decode( wp_remote_retrieve_body( $res ) );
var_dump(res_body);

白名单开放受限接口

JWT Auth默认将一些端点列入白名单。 这是为了防止有关 WordPress 和 WooCommerce 的错误。如果想开放更多公共API,请查看:JWT Auth白名单或者插件官方文档

发表回复

您的电子邮箱地址不会被公开。