首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP OAuth签名与相同值的邮递员签名不匹配

PHP OAuth签名与相同值的邮递员签名不匹配
EN

Stack Overflow用户
提问于 2019-01-26 06:48:25
回答 1查看 1.1K关注 0票数 0

(我已经找到答案了。下面将其作为答案列出,以防其他任何人遇到同样的问题。)

对于使用PHP1.0的PHP调用,OAuth会创建完美工作的WordPress cURL代码。因此,通过尝试他们的原样代码,我知道他们生成的oauth_signature是正确的。

但是根据我能找到的关于这个主题的每个教程和堆栈溢出问题,我无法让我的实现创建一个与Postman使用相同变量生成的oauth_signature相匹配的and。

通常,nonce和当前时间是唯一的值,但我当然是从Postman的数据中复制它们,以便在尝试生成签名以匹配Postman提出的签名时拥有所有相同的数据。

这是我的代码,这就是输入到Postman中的数据,即使有一个虚拟URL和虚拟令牌。我正在寻找关于生成签名的步骤的帮助,而不是实际连接到API (这部分工作得很好)。

我相信我的生成签名的方法有问题,因为其他所有东西都匹配,我唯一不需要检查的信息是Postman的源代码,以了解Postman是如何使用您给出的数据生成签名的,所以我正在寻找这个实现的帮助。

是的,我知道有一些库(我已经查看了其中的一些,以便将我的代码实现与他们的代码进行比较),但我正在尝试在没有库的情况下做到这一点,因为这真的不应该那么难。

代码语言:javascript
运行
复制
<?php

$oauthconsumerkey = "oconsumerkey";
$oauthtoken = "otoken";
$clientsecret = "oclientsecret";
$tokensecret = "otokensecret";

$key = rawurlencode($clientsecret) . "&" . rawurlencode($tokensecret);

$method = "GET";

$baseurl = "https://test.com/wp-json/wp/v2/users/me/";

// these 2 variables were generated by Postman

$nonce = "1TT5UggZswB";
$timenow = "1548458598";

$paramstring = "oauth_consumer_key=" . $oauthconsumerkey . "&oauth_token=" . $oauthtoken . "&oauth_signature_method=HMAC-SHA1" . "&oauth_timestamp=" . $timenow . "&oauth_nonce=" . $nonce;

$encodeurl = $method . "&" . rawurlencode($baseurl) . "&" . rawurlencode($paramstring);

$signature = hash_hmac( 'sha1', $encodeurl, $key, TRUE );

$signature = base64_encode( $signature );

$curlurl = $baseurl . "?" . $paramstring . "&oauth_signature=" . $signature;

print $signature;

?>

从这些变量中,Postman给出一个签名: 4TJtCPkjrkBnIthdUujQ4j/RHtY=

但是上面的代码给出了一个签名: plKJeIp4tWC4J2RebyNuelr7vgg=

(我还意识到我的字符串中有一个用于生成签名的"&“,而"?”在我的cURL网址中。"?“在Postman URL中是cURL的方式,它是站点识别路由所必需的。(为了确认,我已经尝试了两种方式生成签名,使用"&“或"?",因为我看到不同的人对生成签名所需的规范有不同的看法。)

EN

回答 1

Stack Overflow用户

发布于 2019-01-26 07:51:56

我发现了问题所在!推特上的文档确实帮助了我们(https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html),所以谢谢@RamRaider。

我的$paramstring组件顺序错误。我从Postman生成的cURL代码中的PHP中获取它们的顺序,但我猜这个顺序是随机的,与生成签名所需的顺序无关,后者是按字母顺序排列的。我的代码中的那个变量应该是这样构造的:

代码语言:javascript
运行
复制
$paramstring = "oauth_consumer_key=" . $oauthconsumerkey . "&oauth_nonce=" . $nonce . "&oauth_signature_method=HMAC-SHA1" . "&oauth_timestamp=" . $timenow . "&oauth_token=" . $oauthtoken;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54373814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档