iamntz/oauthclient.wp

WordPress OAuth 客户端

dev-master 2018-11-12 18:50 UTC

This package is auto-updated.

Last update: 2024-09-13 11:36:21 UTC


README

一个帮助你通过OAuth 1.0a认证连接到WordPress REST API的类。它需要一个安装的OAuth1插件。

安装

composer require iamntz/oauthclient.wp

使用

$client = new \iamntz\oauthClient\OauthClientWP([
  'url' => $restEndpoint,
  'secret' => 'my-wp-secret',
  'key' => 'my-wp-key',
]);

$client->setNamespace('my_namespace');
$client->setCallbackUrl(add_query_arg('my_namespace_oauth_callback', 1, home_url('/')));
$client->setCallbackHashValidator('hashValidator');

初始化类后,你可以进行认证过程

$client->getToken()

将返回一个数组,其中包含status键上的ok和一个永久令牌,或者一个带有redirect值的request以启动认证过程。

认证后,你可以开始调用,例如

 $client->api('wp/v2/users/me');

关于hashValidator的一些话

如果你使用的是像一台服务器加一个客户端这样的简单设置,这不应该让你太过担心,因为你可以设置一个特定的“祝福”域名,然后就这样了。但你怎么处理多客户端设置呢?我研究了不同的系统,并决定最好的方法是使用一个通用的密钥短语,该密钥短语将在所有服务器上使用;你可以在wp-config.php(通过一个常量)或通过选项字段定义它。

以下是通过wp-config.php实现的方法(添加在服务器和客户端上!)

define('OAUTH_SECRET_KEY', 'KH1tgux%14CJ9tUi*TN5faZrj@!5l1N1h$U*G^4+Vfs(BJVKSO');

然后你可以编写一个小函数,它也会在服务器和客户端上使用

function hashValidator($str) {
  $string = implode('|', [OAUTH_SECRET_KEY, $message]);
  return hash_hmac('sha1', $string, OAUTH_SECRET_KEY);
}

有了这些,是时候将签名域名列入白名单了。为此,我们将使用几种方法

function getDomainSignature()
{
  return isset($_REQUEST['my_namespace_hash']) ? sanitize_text_field(wp_unslash($_REQUEST['my_namespace_hash'])) : '';
}

function maybeWhitelistDomain($valid)
{
  if (OAUTH_SECRET_KEY === getDomainSignature()) {
    return true;
  }

  return $valid;
}

function whietlistField($consumer)
{
  printf('<input type="hidden" name="my_namespace_hash" value="%s">', esc_attr(getDomainSignature()));
}

add_filter('rest_oauth.check_callback', 'maybeWhitelistDomain');
add_action('oauth1_authorize_form', 'whietlistField');

是的,my_namespace部分应该与上一节中的相同!

关于POST数据的一些话

OAuth插件当前实现不遵循OAuth标准,因此所有$_POST数据在签名请求时都被计算在内。目前有一个PR已打开,所以你需要使用@tsmd的版本或自己进行所需的所有更改。

喜欢它吗?

你可以获取托管捐赠或者买给我礼物

许可证

MIT。