token是服務端生成的一串字串,以作客戶端進行請求的令牌,當第一次登陸後,伺服器生成乙個token便將此token返回給客戶端,以後客戶端只要帶上這個token前來請求資料即可,無需再次帶上使用者名稱和密碼
基於token的身份驗證
token的優勢:
1.無狀態.可擴充套件
在客戶端儲存的token是無狀態的,並且能被擴充套件的.基於這種無狀態和不儲存session資訊,負載均衡器能夠將使用者的資訊從乙個伺服器傳到另乙個伺服器上.如果將已經驗證的資訊儲存在session中,則每次請求都需要使用者向已驗證的伺服器傳送驗證資訊(稱為session親和性).使用者量大時,可會造成一些擁堵.但是不要著急,使用token之後問題就會解決,因為token自己hold住了使用者的驗證資訊.
2. 安全性
請求過程中傳送token而不再傳送cookie能夠防止csrf(跨站請求偽造).即使在客戶端使用了cookie儲存token,cookie也僅僅是乙個儲存機制而不是用於認證,不將資訊儲存在session中,讓我們少了對session操作,token是有實效的,一段時間之後需要重新驗證,我們也不一定需要等到token自動實效,token有撤回的操作,通過token revocation可以使乙個特定的token或是一組相同認證的token無效.
3. 可擴充套件性
token能夠將建立與其他程式共享許可權的程式.例如,能將乙個隨便的社交賬號和自己的大號聯絡起來.當通過服務登入(我們將這個過程buffer)時,我們可以將這些buffer附到登入的資料流上.使用token時, 可以提供可選的許可權給第三方應用程式,當使用者想讓另乙個應用程式訪問他們的資料,我們可以通過建立api,得出特殊許可權的tokens
4. 多平台跨域
提前先談論下cors(跨域資源共享), 對應用程式和服務進行擴充套件的時候,需要介入各種的裝置和應用程式,讓我們的api只提供資料服務,我們還可以做出設計選擇來提供cdn中的資產.這消除了在為應用程式設定快速標頭配置後cors出現的問題,只要使用者有乙個通過了驗證的token,資料和資源就能夠在任何域上被請求到.
1. 將荷載payload,以及header資訊進行base64加密,形成密文payload密文,header密文
2. 將形成的密文用句號鏈結起來,用服務端秘鑰進行hs256加密,生成簽名
3.將前面的兩個密文後面用句號鏈結簽名形成最終的token返回給服務端
注:(1) 使用者請求時攜帶此token(分為三部分,header密文, payload密文,簽名)到服務端,服務端解析第一部分(header密文),用base64解密,可以知道用了什麼演算法,此處解析發現是hs256
(2). 服務端使用原來的秘鑰與密文(header密文+"."+payload密文)同樣進行hs256運算,然後用生成的簽名與token攜帶的簽名進行比對,若一致說明token合法,不一致說明原文被修改
(3). 判斷是否過期,客戶端通過用base64解密第二部分(payload密文),可以知道荷載中授權時間,以及有效期.通過這個與當前時間對比發現token是否過期
1.使用者登入校驗,校驗成功後就返回token給客戶端
2. 客戶端收到資料後儲存在客戶端
3. 客戶端每次訪問api是攜帶token到伺服器端
4. 伺服器端採用filter過濾器校驗. 校驗成功則返回請求資料,校驗失敗則返回錯誤碼
究竟什麼是token??
我們都是知道http協議是無狀態的,這種無狀態意味著程式需要驗證每一次請求,從而辨別客戶端的身份。在這之前,程式都是通過在服務端儲存的登入資訊來辨別請求的。這種方式一般都是通過儲存session來完成。隨著web,應用程式,以及移動端的興起,這種驗證的方式逐漸暴露出了問題。尤其是在可擴充套件性方面。...
什麼是 token 以及 token 怎麼用
token的引入 token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,並作出相應提示,在這樣的背景下,token便應運而生。token 的作用 在進行敏感操作之前,每個請求需要攜帶token,但是token 有有效期,token...
token幹什麼用 什麼是token
對於初學者來說,對token和session的使用難免會限於困境,開發過程中知道有這個東西,但卻不知道為什麼要用他?更不知道其原理,今天我就帶大家一起分析分析這東西。一 我們先解釋一下他的含義 1 token的引入 token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並...