給第三方使用介面的 URL 簽名實現

zithan發表於2019-02-21

在開放給第三方使用的API中,如果讓第三方攜帶明文的token請求服務,極有可能洩漏token。由於第三方身份驗證伺服器是依賴於token的,這樣會造成不良的後果。為了提高通訊的安全性,我們需要加密token,就是URL簽名了。

實現URL的簽名過程

  1. 生成URL簽名的signature,假設第三方獲取到token後,token=“aff9u87kkk444hjg”,openId=8996,將要呼叫的API路徑是zithan.test/user/show,那麼URL簽名如下:

    signature=md5('zithan.test/user/show?openId=8996&token=aff9u87kkk444hjg')
  2. 組合API的路徑

    zithan.test/user/show?openId=8996&signature=1aba61306711521e8b52ac2f46bb3ebf
  3. 但是現在還有一個問題,就是重放攻擊,沒有過期時間,假設非法者截獲了這個API路徑,就能反覆呼叫這個路徑。 改進方法是增加時間戳,增加API路徑的時效性。

    signature=md5('zithan.test/user/show?openId=8996&token=aff9u87kkk444hjg&timestamp=1550732083')
zithan.test/user/show?openId=8996&timestamp=1550732083&signature=cba2aa328577e6aab3e811517e1aa752

注意事項

  1. md5可以換成其他非對稱加密的方法
  2. 在獲取token那一個步驟也有可能洩露token,那麼嚴謹就需要採取對稱加密,進行資料加密。
  3. 因為增加了時間戳,那麼就有可能導致第三方和伺服器的差異性,那麼就需要計算第三方的時間差,在驗證簽名或者生成簽名的時候考慮進去。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章