今天一同事溝通介面服務簽名問題,特整理了一下,便於他人查閱。
一、為什麼要簽名?
介面服務需要解決的三個問題
請求是否合法:是否是我的信任方
請求是否被篡改:是否被第三方劫持並篡改引數
防止重複請求(防重放):是否重複請求
二、簽名生成規則
預定義加密方式:雙方約定好的加密方式(一般為雜湊非可逆加密,如 md5、sha1)
ok,我們設定簽名設成規則:
2)將每個請求引數去除「=」,按ascii公升序按「引數1引數值1引數2引數值2……」的格式組成特定的字串
3)將秘鑰secert_a加入上述字串的前後成為
4)按約定方式(如 md5)加密:2995c83bbc12b147c9b5645396e5700e6af92b7f
5)拼接所有引數,組成api請求
第4步生成的字串,就是我們的簽名sign,也作為乙個查詢引數加入到我們的請求中那麼請求就變成了:
平台伺服器在接到這個請求之後,會將請求包中的所有引數按以上相同的方式進行加密。如果生成的引數簽名一致,則簽名通過,請求的合法性和請求引數都得到保護,不會被第三方劫持後篡改變為它用。
三、簽名中是否需要時間戳
簽名的時間戳是防重放(重複請求)的, 只要有個過期時間就好了,例如1分鐘過期。
可以利用的簽名生成規則:引數字典序排序+時間戳+金鑰,然後md5
注意:伺服器端生成的簽名不是用的伺服器時間, 是用的客戶端給過來的時間引數(防止時間戳獲取不同源)
四、總結
API介面簽名驗證
系統從外部獲取資料時,通常採用api介面呼叫的方式來實現。請求方和介面提供方之間的通訊過程,有這幾個問題需要考慮 1 請求引數是否被篡改 2 請求 是否合法 3 請求是否具有唯一性。今天跟大家 一下主流的通訊安全解決方案。引數簽名方式 這種方式是主流。它要求呼叫方按照約定好的演算法生成簽名字串,作為...
API介面簽名驗證
api介面分為開放介面和私密介面。什麼是開放介面?什麼是私密介面?我們乙個乙個介紹它們簽名的驗證,先介紹開放api介面。下面我們稱呼發布介面方為 api arg1 value1,name fdfd,age 12 按照引數名的字母前後順序進行重新排序 3.然後再將排序好的引數,加上secrte 加上當...
API介面簽名驗證
系統從外部獲取資料時,通常採用api介面呼叫的方式來實現。請求方和 介面提供方之間的通訊過程,有這幾個問題需要考慮 1 請求引數是否被篡改 2 請求 是否合法 3 請求是否具有唯一性。今天跟大家 一下主流的通訊安全解決方案。引數簽名方式 這種方式是主流。它要求呼叫方按照約定好的演算法生成簽名字串,作...