關於手機app之api認證

轉載於未知名博客api

 

出於安全kao慮,近期推動一次app和api間通信的認證的流程。捨棄了app認證這種思路,走的用戶受權的思路。安全

具體流程以下:服務器

  1. 就是app第一次啓動時,向服務器請求得到accessId 受權id,accessToken 受權token,accessExp 受權過時時間。 app

  2. 接口請求的時候,將參數,時間戳,accessToken哈希,做爲sign附加在參數上。(若是上https,只要將accessToken附加返回就行了) spa

  3. 當用戶登陸的時候,將用戶id和accessId關聯,存於服務器端。 token

  4. 操做用戶數據接口獲取到用戶id後校驗和accessId關聯的用戶id比較是否一致。 接口

  5. 之後手機啓動的時候,拿保存的access信息,請求更新接口,獲取新的access信息。 內存

 

kao慮的安全問題:博客

  1. 數據私密性,讓數據在傳輸過程當中不可見,避免偷窺狂,解決辦法是上https,第一期不作。 hash

  2. 數據完整性,防止數據發出後被篡改,解決辦法是上https,第一期特麼不上https,第二期又不知道在哪裏。因此,將全部參數,加上時間戳,和access_token拼接後進行hash獲得sign,附加在請求裏面。服務端對sign進行校驗。保證參數不被篡改。 

  3. 請求冪等性,一個請求只請求一次有效,例如A給B轉帳,這個請求調用屢次,只會轉帳一筆。經過accessId,接口,時間戳做爲惟一判斷來避免重放。 

  4. 密鑰泄漏,app被反編譯,密鑰丟了怎麼辦,因此捨棄app受權,改用對用戶受權。 

  5. 內存修改器,app若是直接持有memberId與服務端通信,假如memberId被修改,防線瞬間就瓦解了,因此不以app持有的memberId爲憑證,而是以accessId關聯的memberId爲準。

相關文章
相關標籤/搜索