App的登陸注冊接口安全設計


最近一APP產品,我擔任的主要模塊之一是后台登錄注冊模塊的接口開發。基本完成,就說說並記錄一下關於登錄注冊接口的一些東西,因為也涉及到接口的安全方面的問題。


1.先一般的app的登錄注冊接口安全設計上有兩種主要:一個是token,另外一個是session保持

關於選型:如果你的app的接口和你后台管理系統的接口並不是一個接口的話,可以考慮用token的方式。token方式能減輕服務端的負擔,由於不是共用接口,所以在代碼邏輯上更有又是,比如對登錄用戶進行異地判斷等操作,如果用session保持的方式,則又需要多了一層判斷。代碼又要時刻注意不影響到pc端的使用。

如果你們是屬於前后端分離的話,用的shiro,那么可以考慮session共享的方式。讓App端去保持session。這樣的好處是代碼量開發上能少維護一套接口,接口安全也完全交給shiro就行。但是劣勢也很明顯:修改pc代碼的時候要考慮接口是否會影響到App端,而且由於長時間保持session,服務端的壓力會較大。

2.開發邏輯上需要注意的一些事項:

2.1.前期需要確認好app注冊上的一系列邏輯:比如是否單個手機號可以綁定多個第三方

如果是可以綁定多個第三方,需要在前期的數據庫設計上考慮周全,第三方進行分表設計

2.2.對於app的游客的訪問上要提前考慮好。

2.3.第三方登陸綁定手機是否需要設置默認密碼根據產品而定。如果不需要,請用加密方式給予初始密碼,如果用戶首次手機登陸需要進行初始密碼校驗,引導用戶去設置密碼

2.2.關於頭像的問題

第三方平台的頭像不要直接保存在自己數據庫,由於第三方平台的頭像在用戶在修改頭像后,會導致該url失效,可以拿到url后上傳到自己的平台。

2.3.關於第三方登陸的后台驗證問題

由於第三方的uid和token是第三方平台給的,所以一定要在后台對該參數進行有效性判斷。否則如果用戶的uid被惡意獲取,對該用戶的信息可能是致命的。有兩種方式驗證:

2.3.1:app只傳第三方的accessToken,后台進行接口判斷該token是否存在於系統中,如果沒有就去第三方的接口進行判斷用戶。

2.3.2:app將uid和token都傳過來,后台進行校驗是否存在,如果不匹配就去第三方接口校驗。

區別在於調用的接口不同而已,對於某些第三方平台如果支持accessToken和你的appid進行校驗則采用該方式。

3.對於采用token方式,授予app token的時候,不要采用token加密的方式,比如jwt,如果采用該方式。被惡意者知道的加密方式,將會是致命的。

對於token可以后台隨機生成uuid,然后將對應的用戶信息已key-value的形式存到redis,在存value的時候可以考慮加上當前用戶的ip,token生成時間等,在過濾器中進行一系列的校驗。在請求的時候查看該token是否在redis有對應的值。另外,如果帳號只能同時登陸1個的話,可以在加一個redis值,用戶id對應token。每次登陸,都將原先的token從系統中擦除。

4.對應session的方式,session過期后,統一返回code,然后app在進行調用登陸接口。

5.其他注意事項:

5.1:后台盡量前期與app人員說好上線后采用https協議。這樣他們在前期也會做好對應的代碼設計,不然上線前要增加,他們可能未考慮到,將會很麻煩。

5.2:接口設計盡量簡單,單個接口只完成一個功能。因為在app中,很多調用邏輯並不是像pc那樣在一個頁面能完成,開發中多與前段人員溝通。如果你不了解前端的開發上,請虛心請教

5.3:后期待補充


補充一個系統的登陸注冊接口流程圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM