在開放給第三方使用的API中,如果讓第三方攜帶明文的token請求服務,極有可能洩漏token。由於第三方身份驗證伺服器是依賴於token的,這樣會造成不良的後果。為了提高通訊的安全性,我們需要加密token,就是URL簽名了。
實現URL的簽名過程
-
生成URL簽名的signature,假設第三方獲取到token後,token=“aff9u87kkk444hjg”,openId=8996,將要呼叫的API路徑是zithan.test/user/show,那麼URL簽名如下:
signature=md5('zithan.test/user/show?openId=8996&token=aff9u87kkk444hjg')
-
組合API的路徑
zithan.test/user/show?openId=8996&signature=1aba61306711521e8b52ac2f46bb3ebf
-
但是現在還有一個問題,就是重放攻擊,沒有過期時間,假設非法者截獲了這個API路徑,就能反覆呼叫這個路徑。 改進方法是增加時間戳,增加API路徑的時效性。
signature=md5('zithan.test/user/show?openId=8996&token=aff9u87kkk444hjg×tamp=1550732083')
zithan.test/user/show?openId=8996×tamp=1550732083&signature=cba2aa328577e6aab3e811517e1aa752
注意事項
- md5可以換成其他非對稱加密的方法
- 在獲取token那一個步驟也有可能洩露token,那麼嚴謹就需要採取對稱加密,進行資料加密。
- 因為增加了時間戳,那麼就有可能導致第三方和伺服器的差異性,那麼就需要計算第三方的時間差,在驗證簽名或者生成簽名的時候考慮進去。
本作品採用《CC 協議》,轉載必須註明作者和本文連結