WordPress rest API OAuth curl 命令

2022-08-30 12:58:32

我有WordPress rest APIWordPress OAuth服务器设置插件设置插件,并且每次调用内容没有给我我需要的OAuth令牌或OAuth密钥时,我都尝试使用 http://sevengoslings.net/~fangel/oauth-explorer/ 进行身份验证。

我尝试了这些步骤 https://wordpress.org/support/topic/json-rest-api-from-mobile-app-with-authentication

1. Enter base url (http(s)://your.domain.com/oauth1
2. Access token = request
3. Authorize = authorize
4. Access_Token = access
5. Enter your consumer key and secret (leave method as HMAC-SHA1)

单击,您将获得呼叫内容Get Request Token

我应该在呼叫内容中获取此内容

Call content now = 

oauth_token=xxxxxxxxxxxxxxx&oauth_token_secret=xxxxxxxxxxxxxxxxxxxxx&oauth_call_back_confirmed=true

但我只得到这个

 page not found 

在这里,他们无法让3条腿的OAuth1 .0a工作,所以他们使用了基本的OAuth,这需要另一个插件,不建议用于生产。

我应该使用不同的签名方法吗?

我正在寻找两个 curl 命令来从服务器获取 OAuth 授权,另一个命令用于将此授权换成访问令牌 + 刷新令牌。


答案 1

我已经把它做好了,我将概述我是如何做到这一点的。

我正在使用Postman应用程序来测试和完善API调用。我强烈建议使用这个。一旦你得到了调用工作,你可以导出到PHP Curl(或任何你需要的东西)。

如果您使用Postman,则可以使用此共享链接查看我的API调用。

对于第一次通话,您遇到问题,我有以下设置

首先,我确保我的终端节点 URL 是:

{{url}}/oauth1/request

我将 API 调用设置为 PUSH,将 AuthType 设置为 OAuth 1.0

我添加了我在WP后端>用户>应用程序中创建的consumer_key和consumer_secret(这是通过OAuth插件添加的)。

签名方法 - HSAC-SHA1

然后Postman将更新此内容并动态创建您的Nonce,时间戳和版本。

我将我的领域设置为“示例”

然后,我确保启用了以下选项: - 将参数添加到标头 - 将空参数添加到签名

以下是我为我的参数得到的:

realm="Example",oauth_consumer_key="AdPuqyWrAQQc",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1470248765",oauth_nonce="dnOTvG",oauth_version="1.0",oauth_signature="gUahTX2hfV1lqZCfMUvHtLLoauI%3D"

这为我提供了以下输出:

oauth_token=xbTb4E93K6pP2tcg4qGJIYgl&oauth_token_secret=qWo01WL2ish205yvjiU8qyCkKVPMNUvSbKpFBB1T1oOuOtBc&oauth_callback_confirmed=true

我可以使用Postman将此API调用导出到cURL函数,如果是这样,我得到以下内容:

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "http://mydomain.dev/oauth1/request",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_consumer_key\"\r\n\r\nAdPuqyWrAQQc\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_token\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_signature_method\"\r\n\r\nHMAC-SHA1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_timestamp\"\r\n\r\n1470241356\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_nonce\"\r\n\r\n7VKp4N\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_version\"\r\n\r\n1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_signature\"\r\n\r\n9qRrIkDxt56S9Ikf061eFOVLAdA%3D\r\n-----011000010111000001101001--",
  CURLOPT_HTTPHEADER => array(
    "authorization: OAuth realm=\"Example\",oauth_consumer_key=\"AdPuqyWrAQQc\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1470248765\",oauth_nonce=\"dnOTvG\",oauth_version=\"1.0\",oauth_signature=\"gUahTX2hfV1lqZCfMUvHtLLoauI%3D\"",
    "cache-control: no-cache",
    "content-type: multipart/form-data; boundary=---011000010111000001101001",
    "postman-token: dd85258e-a72a-b731-82d1-00109e30962f"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo 'response ' . $response;

  $a = parse_str($response);

  echo 'token ' . $oauth_token;
  echo '<br>';
  echo 'secret '. $oauth_token_secret;


}

这是 OAuth 身份验证的 3 步过程的第 1 步。我刚刚开始连接它们的旅程。没有太多的文档,也没有很多例子。

步骤 2 类似于使用提供的令牌和机密调用 /oauth1/authorize。这看起来需要用户登录并创建新的(和永久的)令牌和机密。

步骤 3 看起来像是对 /oauth1/access 的调用

我还没有成功地让步骤2和步骤3正确链接在一起,但我认为我应该发布以帮助解决有关第一步未返回正确令牌的原始查询

本文是解释如何使用WP-API和OAuth的更好的文章之一。


答案 2

推荐