方案一、采用https加密方案。
1、賬號密碼登錄,返回token(其實token類似于sessionid,在session里面存放了userid信息),token有過期時間等信息。app端將token保存在本地;過期后要求重新登錄,獲取新的token。
2、請求參數的時候,將token傳到后臺,后臺根據token獲取userid獲取用戶數據。
根據token的時間期限,自動清理。
但是token一直不變的話,經常傳輸的過程中容易被截取。
解決方案如下:
方案二、賬號密碼登錄https加密(推薦方案)
1、登錄:返回一個固定的refreshtoken和accesstoken
2、Accesstoken用來平時請求數據,他的時間期限是固定的(可以協定設置為一天或一周根據實際情況考慮)。時間期限到了之后,就用refretoken請求新的accesstoken。
注:這樣的話傳輸過程中會定期的改變accesstoken被人獲取的傷害會減小(加上有https加密基本獲取不到Accesstoken)
若需求要求一周未使用app需重新登陸的話。可以如下做法。
進入app時可以
先去本地獲取上次登陸時間,有的話獲取和當前時間比較。(注意:在時間范圍內的話,每次進入時更新上次登陸時間為當前時間,或則會出現定期登陸現象)
超過需求要求的時間,就清空refretoken和accesstoken。要求重新登陸。
重新登陸后,服務端將refretoken和accesstoken全部更新。
服務端實現操作:
1、第一次登陸成功。
服務器產生一個refretoken和accesstoken 的map在緩存中,類似于session。
accesstoken的值為refretoken
refretoken的值為userid
用戶用accesstoken登陸時可以通過獲取refreshtoken來得到userid保證數據安全
2、每個accesstoken都有一個時間期限,到了時間期限服務器就需要清掉該緩存。
用戶用refreshtoken來昌盛一個新的accesstoken一次往復
3、用戶登錄時,需要清理這個用戶已經存在的accesstoken和refretoken。避免refretoken一直不變的不安全(如何刷新的話,可以在user表里面發個refretoken,登錄的時候再到該token清掉產生新的重新保存)
以上只是個人想象的方案,有更好的方案,希望指教。