1.基於token的認證方式
在大多數使用Web API
的互聯網公司中,tokens
是多用戶下處理認證的最佳方式。
以下幾點特性會讓你在程序中使用基於Token的身份驗證
1.無狀態、可擴展
2.支持移動設備
3.跨程序調用
4.安全
2.Token的起源
在介紹基於Token
的身份驗證的原理與優勢之前,不妨先看看之前的認證都是怎么做的。
- 基於服務器的驗證
我們都是知道HTTP
協議是無狀態的,這種無狀態意味着程序需要驗證每一次請求,從而辨別客戶端的身份。
在這之前,程序都是通過在服務端存儲的登錄信息來辨別請求的。這種方式一般都是通過存儲Session
來完成。
- 基於服務器驗證方式暴露的一些問題
1.Seesion
:每次認證用戶發起請求時,服務器需要去創建一個記錄來存儲信息。當越來越多的用戶發請求時,內存的開銷也會不斷增加。
2.可擴展性:在服務端的內存中使用Seesion
存儲登錄信息,伴隨而來的是可擴展性問題。
3.CORS
(跨域資源共享):當我們需要讓數據跨多台移動設備上使用時,跨域資源的共享會是一個讓人頭疼的問題。在使用Ajax
抓取另一個域的資源,就可以會出現禁止請求的情況。
4.CSRF
(跨站請求偽造):用戶在訪問銀行網站時,他們很容易受到跨站請求偽造的攻擊,並且能夠被利用其訪問其他的網站。
在這些問題中,可擴展行是最突出的。因此我們有必要去尋求一種更有行之有效的方法。
3.基於Token的驗證原理
基於Token的身份驗證是無狀態的,我們不將用戶信息存在服務器中。這種概念解決了在服務端存儲信息時的許多問題。NoSession
意味着你的程序可以根據需要去增減機器,而不用去擔心用戶是否登錄。
基於Token的身份驗證的過程如下:
-
用戶通過用戶名和密碼發送請求。
-
服務器端程序驗證。
3.服務器端程序返回一個帶簽名的token
給客戶端。
4.客戶端儲存token
,並且每次訪問API
都攜帶Token
到服務器端的。
5.服務端驗證token
,校驗成功則返回請求數據,校驗失敗則返回錯誤碼。
4.時序圖表示
使用 Token
和 Refresh Token
的時序圖如下:
1)登錄

2)業務請求

3)
Token
過期,刷新
Token

上面的時序圖中並未提到
Refresh Token
過期怎么辦。不過很顯然,
Refresh Token
既然已經過期,就該要求用戶重新登錄了。