其他參考: iOS開發(fā),讓數(shù)據(jù)更安全的幾個加密方式
如果是即時通信類:長連接碾褂。
那如何保證服務(wù)器跟客戶端保持長連接狀態(tài)?
答:"心跳包" 用來檢測用戶是否在線!用來做長連接!
登錄的網(wǎng)絡(luò)請求方式一般是http請求(http請求是短連接)——只要登錄成功之后,服務(wù)器就會和 app 斷開連接.
http:是短連接.
http:短連接使用token 機制來驗證用戶安全性
token是指OAuth的accessToken和refreshToken
自動登錄
①最簡單的:直存user password,拿來做示例程序可行暂殖。
②次簡單的:本地預(yù)存token价匠,一般要求不高的產(chǎn)品足夠了。
③標(biāo)準(zhǔn)的:帶時效檢測的token呛每,過時更換token踩窖。
④較安全的:多層token,比如上面Jeff Yang說的晨横,兩層的token毙石。我還見過3層的,但基本原理差不多颓遏,其實就是更復(fù)雜的機制獲取token來保證安全性徐矩。
一般的實現(xiàn)方法是,客戶端在第一次登錄后叁幢,服務(wù)端會同時返回一個access token和refresh token滤灯。
access token有失效期,相對較短曼玩,用于每次和服務(wù)端通信的身份校驗鳞骤。
(可以看出:access token使用非常頻繁,在網(wǎng)絡(luò)中頻繁傳輸會增大被盜取的可能性黍判,容易被截獲豫尽,所以有效時長應(yīng)該較短)
refresh token用于access token失效后換取新的access token時的校驗,成功后返回新的access token和新的refresh token顷帖。
(可以看出:refresh token只有在更新access token時才會在網(wǎng)絡(luò)中傳輸一次美旧,相對安全)
服務(wù)器如何判斷當(dāng)前用戶是否登錄?
token 值的生成與獲取:
當(dāng)用戶首次登錄成功之后, 服務(wù)器端就會根據(jù)用戶的信息(賬號/密碼/身份認(rèn)證機制(電話號/身份證號/支付寶賬號/銀行卡信息)...)生成一個唯一性的 token 值,來用于標(biāo)識用戶身份的值贬墩,并將這個token值返回給客戶端榴嗅。
①服務(wù)器對token值的處理:
* 會在服務(wù)器保存token值(保存在數(shù)據(jù)庫中)
* 將這個token值返回給客戶端.
②客戶端拿到 token 值之后,對token值的處理,一般為將其保存下來陶舞,而保存的位置一般為下面兩個位置 :
1. 將 token 保存在 cookie 中;
2.將 token 保存在沙盒中,作為一個公共參數(shù)傳遞.
token 值: 登錄令牌! 用來判斷當(dāng)前用戶的登錄狀態(tài)!
趨勢: 登錄成功后的所有的網(wǎng)絡(luò)接口基本都會要求帶 token 值這個參數(shù).但是呢,這個參數(shù)對于有些接口來說不是必要的參數(shù).
如登錄成功后嗽测,客戶端再發(fā)送的網(wǎng)絡(luò)請求,就會將這個 token 值附帶到參數(shù)中(公共參數(shù))發(fā)送給服務(wù)器肿孵。服務(wù)器接收到客戶端的請求之后唠粥,會取出token值與保存在服務(wù)器本地(數(shù)據(jù)庫)中的token值做對比!
①如果兩個 token 值相同 :說明用戶登錄成功過!當(dāng)前用戶處于登錄狀態(tài)!
②如果沒有這個 token 值, 說明沒有登錄成功.
③如果 token 值不同: 說明原來的登錄信息已經(jīng)失效,讓用戶重新登錄.
token 值失效問題:
1、token的有效時間:
①如果 app 是新聞類/游戲類/聊天類等需要長時間用戶粘性的. 一般可以設(shè)置1年的有效時間!
②如果 app 是 支付類/銀行類的. 一般token只得有效時間比較短: 15分鐘左右!
所以停做,如果超過有效時間晤愧,則token自動失效。
2雅宾、token 值用來做設(shè)備唯一性登錄判斷!
每次登錄之后,無論用戶密碼是否改變,只要調(diào)用登錄接口并且登錄成功,都會在服務(wù)器生成新的token值,原來的token值就會失效!
典型的 app : 打車軟件類
拓展: 多臺設(shè)備同時登錄. 設(shè)備唯一性登錄!
比如說QQ:允許在①電腦客戶端登錄养涮,②手機客戶端登錄, ③網(wǎng)頁端登錄。如果超出這三個端眉抬,想要在另外一個相同的端登錄(比如已經(jīng)登錄了手機客戶端了贯吓,還要在另一臺手機客戶端上登錄),那么我們需要使對應(yīng)的端的token失效蜀变,來保證一個賬號一個端只登錄一次悄谐。
問:具體我們怎么做呢?
答:我們可以根據(jù)不同登錄端库北,設(shè)置不同token爬舰。登錄的時候,根據(jù)該登錄端寒瓦,來檢測token 是否過期情屹。 根據(jù)登錄的數(shù)量 可以判斷最大支持多少個設(shè)備同時登錄
如果允許多臺設(shè)備同時登錄 ,并且可以設(shè)置最大的登錄數(shù)量的時候杂腰。
二垃你、token的高級用法
2.1 token值失效
token值失效! ---- 數(shù)據(jù)同步有關(guān)!
密碼可以隨時修改! ----- 當(dāng)修改了密碼之后,原來的 token 值就會失效, 服務(wù)器會返回一個新的 token.
數(shù)據(jù)同步 : pc 端/網(wǎng)頁瀏覽 --- 和 app 端可以同時登陸!
例子:實現(xiàn)我們在手機和筆記本上同時QQ在線,但是我們在手機上修改了QQ的密碼喂很。那么筆記本會是什么樣子的呢惜颇?
1、筆記本還是在登陸狀態(tài)少辣,但是在我們退出后再次登錄時無法實現(xiàn)自動登錄>>我們在自動登錄時判斷登錄狀態(tài)凌摄,同時判斷token只是否改變。
2漓帅、在我們進(jìn)行網(wǎng)絡(luò)請求時锨亏,就出現(xiàn)問題提示我們密碼已修改——這說明我們的網(wǎng)絡(luò)請求使用到token值。
判斷用戶的登錄狀態(tài): 不僅判斷是否登錄成功, 還要判斷密碼(token值)是否改變,是否需要用戶再次登錄,是否需要重置密碼!