在開放給第三方使用的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,那麼嚴謹就須要採起對稱加密,進行數據加密。
- 由於增長了時間戳,那麼就有可能致使第三方和服務器的差別性,那麼就須要計算第三方的時間差,在驗證簽名或者生成簽名的時候考慮進去。