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。