介面開發安全問題
- 2019 年 12 月 17 日
- 筆記
介面開發安全問題
公司業務擴展需要,需對外提供介面給其他第三方系統使用。很多人說是系統並不安全,缺乏安全考慮。所以抽出時間思考整理了一番
採用認證 + 簽名驗證的方式來進行傳輸
認證 : (認證方式為: Oauth2
) 其他外部系統調用垂直系統介面需通過垂直系統提供的指定帳號密碼進行登錄,獲取秘鑰。
Authorization:Bearer y3XWtwWaxqCEBDoE-qzZk0bCp3UKO920
簽名驗證 滿足第一步條件,方可進行簽名驗證。
簽名所需參數:
- 秘鑰(垂直系統提供)
- token (令牌 登錄可獲取)
- timestamp (時間戳)
- 以及其他參數
- sign 簽名
簽名生成步驟:
第一步,設所有發送或者接收到的數據為集合M,將集合M內非空參數值的參數按照參數名 ASCII 碼從小到大排序(字典序),使用 URL 鍵值對的格式(即key1=value1&key2=value2…)拼接成字元串stringA。 特別注意以下重要規則:
參數名 ASCII 碼從小到大排序(字典序);
如果參數的值為空不參與簽名;
參數名區分大小寫;
驗證調用返回或微信主動通知簽名時,傳送的 sign 參數不參與簽名,將生成的簽名與該sign值作校驗。
第二步,在stringA最後拼接上 key 得到 stringSignTemp 字元串,並對 stringSignTemp進行 MD5 運算,再將得到的字元串所有字元轉換為大寫,得到 sign 值 signValue。 簽名演算法與微信一致。上方一些內容來自微信開發文檔
IP白名單,第三方需要聯調需提供外網機器IP地址 說了這麼多,本身也不確定此方案可不可行,但是應該也差不多吧。另外對於特別銘感資訊.需採用 HTTPS 協議進行傳輸
具體實現就是接下來的問題了,下一章節,(採用 Yii2.0)進行詳細描述。