簡體   English   中英

OAuth 1.0 在 POSTMAN 和 PHP 代碼中生成簽名差異

[英]OAuth 1.0 Generate Signature Difference in POSTMAN and PHP code


我想對使用 OAuth 作為身份驗證方法的 API 進行身份驗證。
我已經創建了此代碼來生成簽名。
**這些都是用於測試目的的虛擬數據!**
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只是一種使用令牌保護所述路由的方法,因此:

  • 第一次將憑據發送到 Server 的login-route ,沒有生成任何內容(來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM