現有一個resetful api,是給手機APP使用的,APP大多數內容是不需要登入即可瀏覽,但是也有一部分是註冊使用者登入後才能使用的,有什麼辦法能驗證這個登入後的使用者真實性,想過返回一個access_token(自訂的,非oauth方法),但還是感覺會有冒用的風險。請教有什麼辦法驗證這個使用者的真實性而不是盜用access_token冒充的?
回複內容:
現有一個resetful api,是給手機APP使用的,APP大多數內容是不需要登入即可瀏覽,但是也有一部分是註冊使用者登入後才能使用的,有什麼辦法能驗證這個登入後的使用者真實性,想過返回一個access_token(自訂的,非oauth方法),但還是感覺會有冒用的風險。請教有什麼辦法驗證這個使用者的真實性而不是盜用access_token冒充的?
這是一個典型的如何證明我是我的問題
,沒有絕對安全的方法,只能通過增加難度來提高安全性。方法有很多,你所說的令牌是其中一種常用方法,除此之外最簡單最有效就是使用https加密傳輸。其他的還有,比如重要操作每次都要求輸入密碼、以及動態密碼等等。
上面是技術性的做法,還有一種安全手段是非技術性的,更多的屬於社會學範疇(當然最終肯定都是要通過技術手段來實現的)。比如特徵庫。每個使用者都有一組特徵來標識,隨著使用次數的增加,這種特徵的收集會越來越詳細,然後系統就可以用這些特徵來驗證使用者是否是本人。例如使用者的常用登入地、手機裝置特徵、輸入習慣、使用習慣、興趣愛好等等。這些就像是一個人的指紋一樣,很難偽造。不過這個東西實現起來並不是那麼容易就是了。
安全性就是這樣,矛和盾的關係,沒有無堅不摧的矛,更沒有絕對防禦的盾。一切都要折衷,只要破解的成本大於破解後得到的利益,就可以認為系統是安全的。
resetful 無狀態,就肯定有會有被冒用的可能性。
使用和用戶端同一套加密方式產生token。
token不合法,直接拒絕。
驗證通過,根據裡面的資訊,比如有個使用者id=1,伺服器解密後判斷id=1使用者是否登入即可。
如果用戶端被反編譯,演算法被知道,使用者還是要登入才行,因為登入資訊在伺服器。
理論上說,如果每次token都不一樣,是不存在被抓包的可能性的,那樣沒意義。
私人API可以使用token來驗證使用者身份,再控制好使用者的請求頻度,避免API濫用。