WordPress REST API OAuth curl 命令

Posted

技术标签:

【中文标题】WordPress REST API OAuth curl 命令【英文标题】:WordPress rest API OAuth curl commands 【发布时间】:2016-03-25 06:58:36 【问题描述】:

我有WordPress rest API 和WordPress OAuth server setup plugins 设置并尝试使用http://sevengoslings.net/~fangel/oauth-explorer/ 进行身份验证 每次通话内容都没有给我我需要的 OAuth 令牌或 OAuth 密码时。

我尝试了这些步骤 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-legged OAuth1 .0a 工作,因此他们使用了需要另一个插件的基本 OAuth,因此不建议将其用于生产。

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

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

【问题讨论】:

您能提供一些您已经尝试过的代码示例吗?您的 OAuth 设置是否接受 POST 请求?其他人可以尝试您的设置吗? 【参考方案1】:

我已经完成了这项工作,我将概述我是如何做到这一点的。

我正在使用Postman application 来测试和完善 API 调用。我强烈建议使用它。调用成功后,您可以导出到 php Curl(或您需要的任何内容)。

If you use Postman you can view my API calls using this shared link.

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

首先,我确定我的端点 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 步正确链接在一起,但我认为我应该发布以帮助解决关于第一步未返回正确标记的原始查询

This article 是解释如何使用 WP-API 和 OAuth 的更好的方法之一。

【讨论】:

以上是关于WordPress REST API OAuth curl 命令的主要内容,如果未能解决你的问题,请参考以下文章

将 OAuth2 或 JWT 用于带有 Wordpress 后端(REST API)的移动应用程序

wp rest api 授权方法步骤(使用JWT Authentication插件)

具有同源策略和 OAuth 的 REST API 身份验证

Wordpress REST API (wp-api) 404 错误:无法访问 WordPress REST API

Magento 使用 OAuth 通过 REST API 到 NodeJS

Django REST Framework - 来自外部提供商的 OAuth2 Consumer API