單點登錄是什么 Jwt的token如何像session一樣去延長時間?
Jwt的token如何像session一樣去延長時間?隨著技術的發(fā)展和分布式web應用的普及,通過會話管理用戶登錄狀態(tài)的成本越來越高。因此,它逐漸發(fā)展成為一種令牌方式來進行登錄身份驗證,然后利用令牌獲
Jwt的token如何像session一樣去延長時間?
隨著技術的發(fā)展和分布式web應用的普及,通過會話管理用戶登錄狀態(tài)的成本越來越高。因此,它逐漸發(fā)展成為一種令牌方式來進行登錄身份驗證,然后利用令牌獲取緩存在redis中的用戶信息。隨著JWT的出現,驗證方法更加簡單方便。它不使用redis緩存,而是直接基于令牌取出保存的用戶信息,驗證令牌的可用性,使單點登錄更容易。
JWT通常包含兩個令牌:訪問令牌和刷新令牌。當用戶通過登錄等方式成功驗證身份時,服務器會生成一個訪問令牌和一個刷新令牌,并返回前端存儲。兩個令牌的過期時間都將在服務器上設置,但訪問令牌的過期時間較短,而刷新令牌的過期時間較長。當當前端向服務器發(fā)送請求時,訪問令牌將與請求一起發(fā)送到服務器,以驗證請求者的身份。當服務器發(fā)現訪問令牌已過期時,它將返回失敗信息。此時,前端需要使用refresh token從服務器申請新的訪問令牌。如果刷新令牌沒有問題,服務器將生成一個新的訪問令牌。如果刷新令牌已過期,則需要要求用戶再次登錄以驗證其身份。
總之,JWT擴展是通過使用過期時間較長的刷新令牌重新申請新的訪問令牌來實現的。當刷新令牌也已過期時,不可能延長時間。
移動端開發(fā)為什么不采用session而是用token?
事實上,令牌和會話不是同一個域概念。令牌是字符串,而會話是會話。兩者并不沖突或相互替代。
這里我要說的是令牌和會話ID之間的區(qū)別(通常在cookie中)。
令牌本身是由OAuth系列在大規(guī)模普及之前引入的。主要目的是支持sso,即單點登錄,這是OAuth系列的主要需求。當然,一些基于cookie/會話的框架(比如jasigcas)可以支持sso,但是它們沒有OAuth那么簡潔。OAuth使用token作為唯一的證書,第三方服務器在驗證token后可以建立自己的會話(廣義上說,在redis中可以同時使用傳統(tǒng)會話和token作為密鑰),并將用戶認證完全委托給OAuth。因此,分工相對明確,成為眾多商家共享用戶資源建立自己生態(tài)系統(tǒng)的首選。
傳統(tǒng)的會話管理很難實現這些目標。