[英]OAuth 1.0 Generate Signature Difference in POSTMAN and PHP code
My application: NWNjMzgyOGJiYWU1YmNiNzNlMzRjMjA5ZGNiNmIzZWNiNTAzYjRhNjE0NTMyZjYyN2MwNzM5ZjNmZDEzNDYxNg==
POSTMAN: XMOCi7rlvLc%2BNMIJ3Laz7LUDtKYUUy9ifAc58%2F0TRhY%3D
}
此函數生成與我使用此在線工具生成的簽名匹配的正確簽名: 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 個完全不同的簽名,而在兩個應用程序中我使用相同的憑據,您也可以對此進行測試。
現在來我的問題:
誰能告訴我為什么這些簽名不同,我需要做什么才能讓我自己的簽名也起作用? 因為郵遞員生成的那個完美地工作。
我真的卡住了,我的同事也找不到原因。
任何幫助表示贊賞:)
我想你明白以下:
您的后端( PHP
服務器)提供路由(響應請求)。
Postman
應該通過請求來測試所述路由,甚至還有測試部分(測試響應)。
但OAuth
只是一種使用令牌保護所述路由的方法,因此:
Postman
或 Frontend,沒有區別)。Postman
應該在測試部分接收令牌並將令牌保存在集合變量中,以供以后在任何其他路由請求中使用。我的意思是,
Postman
不應該生成任何東西,至少不是OAuth
。
這里的問題可以在基本簽名的編碼中找到以生成實際簽名。 您需要將 hash_hmac 方法中的二進制標志設置為 true。 這將返回消息摘要的原始二進制表示形式,而后者又需要進行 base64 編碼。
$signature = base64_encode(hash_hmac('sha256', $base, $key, true));
https://www.php.net/manual/en/function.hash-hmac.php
這將產生一個與 Postman 所做的相同的簽名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.