【发布时间】:2021-12-19 15:17:50
【问题描述】:
我想对使用 OAuth 作为身份验证方法的 API 进行身份验证。
我已经创建了此代码来生成签名。
**这些都是用于测试目的的虚拟数据!**
$consumerKey = "468gu89fu8934uf3jf935jg5i2954";
$consumerSecret = "9385u3jg389gj349856u985j349t8";
$tokenSecret = "353459385j3fojlkvm34tfewoijr4";
$accessToken = "598u45983jf3jr3i45jkr3elkrj34";
$realm = "389534j5oi";
$signatureMethod = "HMAC-SHA256";
$version = "1.0";
function generateSignature($request, $timestamp, $nonce)
{
Global $consumerKey, $accessToken, $consumerSecret, $tokenSecret, $realm, $signatureMethod, $version;
$base = $request['method'] . "&" . rawurlencode($request['url']) . "&"
. rawurlencode("oauth_consumer_key=" . rawurlencode($consumerKey)
. "&oauth_nonce=" . rawurlencode($nonce)
. "&oauth_signature_method=" . rawurlencode($signatureMethod)
. "&oauth_timestamp=" . rawurlencode($timestamp)
. "&oauth_token=" . rawurlencode($accessToken)
. "&oauth_version=" . rawurlencode($version));
$key = rawurlencode($consumerSecret) . '&' . rawurlencode($tokenSecret);
$signature = base64_encode(hash_hmac('sha256', $base, $key));
return $signature;
}
此函数生成与我使用此在线工具生成的签名匹配的正确签名:https://www.devglan.com/online-tools/hmac-sha256-online
但是,当我将所有这些参数添加到 POSTMAN 时,它会生成不同的签名。
它与我生成的签名完全不匹配。
我遇到的问题是 API 端点使用 POSTMAN 成功验证了身份,但没有使用我自己生成的签名。
让我们使用这些凭据来生成签名。
$consumerKey = "468gu89fu8934uf3jf935jg5i2954";
$consumerSecret = "9385u3jg389gj349856u985j349t8";
$tokenSecret = "353459385j3fojlkvm34tfewoijr4";
$accessToken = "598u45983jf3jr3i45jkr3elkrj34";
$realm = "389534j5oi";
$signatureMethod = "HMAC-SHA256";
$version = "1.0";
$nonce = "LQgbebz9DTe";
$timestamp = "1636124296";
$url = "https://fakeapi.com/auth";
$method = "GET";
这些是生成的签名:
My application: NWNjMzgyOGJiYWU1YmNiNzNlMzRjMjA5ZGNiNmIzZWNiNTAzYjRhNjE0NTMyZjYyN2MwNzM5ZjNmZDEzNDYxNg==
POSTMAN: XMOCi7rlvLc%2BNMIJ3Laz7LUDtKYUUy9ifAc58%2F0TRhY%3D
如您所见,在我使用相同凭据的两个应用程序中生成了 2 个完全不同的签名,您也可以对此进行测试。
现在是我的问题:
谁能告诉我为什么这些签名不同,我需要做什么才能让我自己的签名也起作用?因为邮递员生成的那个完美无缺。
我真的卡住了,我的同事也找不到原因。
任何帮助表示赞赏:)
【问题讨论】:
-
您说过类似 [Postman 的 generate-logic 工作为什么不是我的],所以请编辑并添加 Postman 的逻辑!?
-
不,没这么说,我说过当我将Oauth与邮递员一起使用时,它生成的签名有效。
标签: php api oauth postman signature