**16.app后端如何保证通讯安全--url签名
app和后端的通訊過程中,api請求有可能被別人截取或不小心泄露。那么,怎么保證api請求的安全呢?在這篇文章中,介紹一種常見的保證api請求安全的做法--url簽名。
1. url簽名詳解
在前一篇文章<15.app后端怎么設(shè)計(jì)用戶登錄方案>中,服務(wù)器中驗(yàn)證用戶名和密碼都正確后,生成一個隨機(jī)的不重復(fù)的token字符串(例如"daf32da456hfdh"),在redis或memcache中維護(hù)一個映視表,建立token字符串和用戶信息的對應(yīng)關(guān)系表,例如,把token字符串"daf32da456hfdh"和用戶id"5"對應(yīng)起來,服務(wù)器把token字符串返回給app用作身份驗(yàn)證。
這個身份驗(yàn)證是依賴于token字符串。如果用戶泄露了自己的url, 那很大程度上token也被別人泄漏了。
怎么防止token被泄露?不讓token在網(wǎng)絡(luò)上傳輸就行。
注意,這個url簽名的方法是和前面<15.app后端怎么設(shè)計(jì)用戶登錄方案>緊密聯(lián)系在一起的,沒看過前面一篇文章請先看。
(1) 服務(wù)器中驗(yàn)證用戶名和密碼都正確后,把token字符串和用戶id都返回給客戶端,例如token字符串"daf32da456hfdh"和用戶id"5"。
(2)假設(shè)api請求為"test.com/user/info", 通過token字符串"daf32da456hfdh"生成md5簽名后: md5("test.com/user/info&token=daf32da456hfdh”)= C99DC0C22437AC275C08CE4A9708B25A
于是,api請求加上簽名和用戶標(biāo)識后就是 "test.com/user/info?userId=5&sign= C99DC0C22437AC275C08CE4A9708B25A"
(3)服務(wù)器接收到這個url后,用(2)的算法生成簽名和sign參數(shù)對比,如果發(fā)現(xiàn)相等的話,就表示這個url是有有效,那就繼續(xù)執(zhí)行這個api調(diào)用。
用上面的這個方法,就能避免token在api調(diào)用時泄露。
上面的方法還有一個問題,因?yàn)檫@個api請求"test.com/user/info?userId=5&sign= C99DC0C22437AC275C08CE4A9708B25A"上沒有過期時間,假設(shè)別人拿到這個api的請求,就能反復(fù)調(diào)用了。
改進(jìn)方法是在傳遞的參數(shù)中增加時間戳,當(dāng)發(fā)現(xiàn)這個時間戳離現(xiàn)在的時間已經(jīng)很久了,就判斷這個url已經(jīng)失效了。
但用時間戳怎么保證app的時間和服務(wù)器的時間同步?在app每次啟動時和服務(wù)器同步時間,然后在app內(nèi)建一個時鐘,時間戳在這個app的內(nèi)部時鐘獲取,防止用戶修改了手機(jī)的時間導(dǎo)致時間不一致。
于是有了下面的改進(jìn)方法:
(1)假設(shè)api請求為"test.com/user/info", 用token字符串"daf32da456hfdh"和時間戳生成md5簽名后: md5("test.com/user/info?userId=5&token=daf32da456hfdh×tamp=1425860757”)= C116161A6F430343B6CECF08562F1371
于是,api請求加上簽名和用戶標(biāo)識后就是 "test.com/user/info?userId=5×tamp=1425860757&sign= C116161A6F430343B6CECF08562F1371"
(2)服務(wù)器接收到這個api請求,如果發(fā)現(xiàn)收到這個url請求的時間和time=1425860757相隔很久,就判斷出這個url是被別人截取來反復(fù)調(diào)用了。如果時間合法,那就用(1)的算法再判斷sign是否一致
2. url簽名的不足之處
url簽名有兩個缺點(diǎn):
1.當(dāng)用戶第一次登錄后token是明文返回,有被截取的風(fēng)險
2. url簽名只能保護(hù)token值卻沒法保護(hù)其他敏感數(shù)據(jù),例如,當(dāng)用戶更新自己的個人信息時,所有的信息在傳輸過程中應(yīng)該是被加密的
怎么解決這兩個問題?使用下篇介紹的對稱加密的算法就可以了。
?
http://blog.csdn.net/newjueqi/article/details/44154791
總結(jié)
以上是生活随笔為你收集整理的**16.app后端如何保证通讯安全--url签名的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Andriod 测试 day1andr
- 下一篇: win32窗口机制之CreateWind