App後臺開發運維和架構實踐學習總結(1)——App後臺核心技術之用戶驗證方案

對於初學者來說,對Token和Session的使用難免會限於困境,開發過程中知道有這個東西,但卻不知道爲什麼要用他?更不知道其原理,今天我就帶大家一起分析分析這東西。

一、使用Token進行身份鑑權

 

網站應用一般使用Session進行登錄用戶信息的存儲及驗證,而在移動端使用Token則更加普遍。它們之間並沒有太大區別,Token比較像是一個更加精簡的自定義的Session。Session的主要功能是保持會話信息,而Token則只用於登錄用戶的身份鑑權。所以在移動端使用Token會比使用Session更加簡易並且有更高的安全性,同時也更加符合RESTful中無狀態的定義

二、交互流程

  1. 客戶端通過登錄請求提交用戶名和密碼,服務端驗證通過後生成一個Token與該用戶進行關聯,並將Token返回給客戶端。
  2. 客戶端在接下來的請求中都會攜帶Token,服務端通過解析Token檢查登錄狀態。
  3. 當用戶退出登錄、其他終端登錄同一賬號(被頂號)、長時間未進行操作時Token會失效,這時用戶需要重新登錄。

    三、我們先解釋一下他的含義:

    1、Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。

    2、Token的定義:Token是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,當第一次登錄後,服務器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。

    3、使用Token的目的:Token的目的是爲了減輕服務器的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。

    瞭解了Token的意義後,我們就更明確的知道爲什麼要用他了。

    四、如何使用Token?

    這是本文的重點,在這裏我就介紹常用的兩種方式。

    1、用設備號/設備mac地址作爲Token(推薦)

    客戶端:客戶端在登錄的時候獲取設備的設備號/mac地址,並將其作爲參數傳遞到服務端。

    服務端:服務端接收到該參數後,便用一個變量來接收同時將其作爲Token保存在數據庫,並將該Token設置到session中,客戶端每次請求的時候都要統一攔截,並將客戶端傳遞的token和服務器端session中的token進行對比,如果相同則放行,不同則拒絕。

    分析:此刻客戶端和服務器端就統一了一個唯一的標識Token,而且保證了每一個設備擁有了一個唯一的會話。該方法的缺點是客戶端需要帶設備號/mac地址作爲參數傳遞,而且服務器端還需要保存;優點是客戶端不需重新登錄,只要登錄一次以後一直可以使用,至於超時的問題是有服務器這邊來處理,如何處理?若服務器的Token超時後,服務器只需將客戶端傳遞的Token向數據庫中查詢,同時並賦值給變量Token,如此,Token的超時又重新計時

    2、用session值作爲Token

    客戶端:客戶端只需攜帶用戶名和密碼登陸即可。

    客戶端:客戶端接收到用戶名和密碼後並判斷,如果正確了就將本地獲取sessionID作爲Token返回給客戶端,客戶端以後只需帶上請求數據即可。

    分析:這種方式使用的好處是方便,不用存儲數據,但是缺點就是當session過期後,客戶端必須重新登錄才能進行訪問數據

    五、使用過程中出現的問題以及解決方案?

    剛纔我們輕鬆介紹了Token的兩種使用方式,但是在使用過程中我們還出現各種問題,Token第一種方法中我們隱藏了一個在網絡不好或者併發請求時會導致多次重複提交數據的問題。

    該問題的解決方案:將session和Token套用,如此便可解決,如何套用呢?請看這段解釋:

wKioL1QX85nCkJ5qAABWcdNyC0g731.png

     這就是解決重複提交的方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章