摘要:當(dāng)達到過期時間時,需要對進行續(xù)簽,可以定時想服務(wù)器提交請求,重新獲取來實現(xiàn)。注銷問題注銷問題當(dāng)客戶登錄的時候,需要注銷登錄會話,由于是沒有狀態(tài)的,只能在客戶端把刪除,偽造一個注銷的狀態(tài),真正的注銷只能等待過期。
一般情況下,客戶的會話數(shù)據(jù)會存在文件中,或者引入redis來存儲,實現(xiàn)session的管理,但是這樣操作會存在一些問題,使用文件來存儲的時候,在多臺機器上,比較難實現(xiàn)共享,使用redis來存儲的時候,則需要引入多一個集群,這樣會增加管理的工作量,也不方便。有一個直觀的辦法,就是將session數(shù)據(jù),存儲在客戶端中,使用簽名校驗數(shù)據(jù)是否有篡改,客戶請求的時候,把session數(shù)據(jù)帶上,獲取里面的數(shù)據(jù),通過校驗,然后進行身份認證。
數(shù)據(jù)存儲在客戶端中,會存在一些挑戰(zhàn):
為了實現(xiàn)客戶端存儲會話數(shù)據(jù)的解決方案,制定了JSON Web Token的協(xié)議,詳細的協(xié)議可以在:RFC7529查看。下面我們看看jwt協(xié)議是怎樣解決上面的挑戰(zhàn)的。
JWT加密后,使用的格式,分為三部分,header,payload和signature,使用.號連接起來:
Header.Payload.Signature
JWT的header,定義了存儲的算法和協(xié)議名稱:
{
"alg": "HS256",
"typ": "JWT"
}
下面這些負載字段,是JWT協(xié)議提供選用,一般情況下,payload的數(shù)據(jù)是不加密存儲在客戶端中的,所以要注意不要存儲敏感信息:
iss (issuer):簽發(fā)人
exp (expiration time):過期時間
sub (subject):主題
aud (audience):受眾
nbf (Not Before):生效時間
iat (Issued At):簽發(fā)時間
jti (JWT ID):編號
payload除了這些字段,還可以擴展一些數(shù)據(jù),更加符合我們的需求:
{
"iss": "foo",
"extend_data": "hell"
}
服務(wù)端,有一個秘鑰,通過秘鑰對header和payload進行簽名,使用header中指定的簽名算法類型,一般有HMAC,RSA和ECDSA,下面是簽名的格式:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT一般會將token數(shù)據(jù)存儲在http請求的header中,通過Bearer來分隔:
headers: {
"Authorization": "Bearer " + token
}
定義好數(shù)據(jù)結(jié)構(gòu)和通訊方式,下面看看如何處理一些問題:
每一個token產(chǎn)生,都應(yīng)該限制好過期時間,確保只能在一段時間內(nèi)有效,保證安全。當(dāng)達到過期時間時,需要對token進行續(xù)簽,可以定時想服務(wù)器提交請求,重新獲取token來實現(xiàn)。
當(dāng)客戶登錄的時候,需要注銷登錄會話,由于token是沒有狀態(tài)的,只能在客戶端把token刪除,偽造一個注銷的狀態(tài),真正的注銷只能等待token過期。
也可以有種辦法,就是把token的信息記錄在redis中,當(dāng)客戶退出時,講redis中的token刪除,而一般請求時,會通過redis對數(shù)據(jù)進行校驗,這樣可以實現(xiàn)真的注銷效果,但要引入多一個組件,把token變?yōu)橛袪顟B(tài),如果用這種辦法,也就不符合token存儲在客戶端的模式了
如果能夠支持,會話用的數(shù)據(jù)量較小,對注銷可以等待超時的長效的場景,使用jwt作為會話數(shù)據(jù)存儲是會比較方便的。而對于會話數(shù)據(jù)量大的場景,還是使用一般的方式比較好點。
RFC7529
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/1240.html
摘要:簡稱,在通信過程中,進行身份認證。服務(wù)器完全只靠這個對象認定用戶身份。規(guī)定了個官方字段,供選用。1. JSON WEB TOKEN 1.1 什么是JWT ? JSON Web Token(JWT)是一個非常輕巧的規(guī)范。這個規(guī)范允許我們使用JWT在用戶和服務(wù)器之間傳遞安全可靠的信息。 ? 簡稱JWT,在HTTP通信過程中,進行身份認證。 ? 我們知道HTTP通信是無狀態(tài)的,因此客戶端的請求到了...
摘要:今天我們來結(jié)合實例給大家講述的實戰(zhàn)應(yīng)用,就是如何使用前端與后端實現(xiàn)用戶登錄鑒權(quán)認證的過程。只用了一個串,建立前后端的驗證的數(shù)據(jù)傳遞,實現(xiàn)了有效的登錄鑒權(quán)過程。 今天我們來結(jié)合實例給大家講述JWT(Json Web Token)的實戰(zhàn)應(yīng)用,就是如何使用前端Axios與后端PHP實現(xiàn)用戶登錄鑒權(quán)認證的過程。 文中涉及的重要知識點: axios異步請求:axios-基于Promise的HTT...
摘要:由于是存在客戶端上的,所以瀏覽器加入了一些限制確保不會被惡意使用,同時不會占據(jù)太多磁盤空間。簽名是對前兩部分的簽名,防止數(shù)據(jù)被篡改。的作用最開始的初衷是為了實現(xiàn)授權(quán)和身份認證作用的,可以實現(xiàn)無狀態(tài),分布式的應(yīng)用授權(quán)。 前言 無狀態(tài)的HTTP協(xié)議 很久很久之前, Web基本都是文檔的瀏覽而已。既然是瀏覽, 作為服務(wù)器, 不需要記錄在某一段時間里都瀏覽了什么文檔, 每次請求都是一個新的HT...
摘要:到這里,基于的前后端分離實現(xiàn)方案就搞定啦四關(guān)于的一些思考實際上,在使用的過程中有一個比較致命的缺點,就是一旦簽發(fā)了,在到期之前就會始終有效,除非服務(wù)器部署額外的邏輯。結(jié)語以上是關(guān)于基于的前后端分離實現(xiàn)方案的總結(jié)和思考。 一、jwt是什么 JWT全稱, JSON Web Token,是一個以JSON為基準的標準規(guī)范。 舉例:服務(wù)器認證以后,生成一個 JSON 對象,發(fā)回給用戶,就像下...
摘要:在使用非對稱加密算法進行簽名的時候,還可以用于驗證的發(fā)件人是否與中申明的發(fā)件人是同一個人。如果沒有用非對稱加密算法的話,把復(fù)制之后直接可以去官網(wǎng)在線解析。 這篇博客主要是簡單介紹了一下什么是JWT,以及如何在Spring Boot項目中使用JWT(JSON Web Token)。 1.關(guān)于JWT 1.1 什么是JWT 老生常談的開頭,我們要用這樣一種工具,首先得知道以下幾個問題。 這...
閱讀 4034·2021-07-28 18:10
閱讀 2665·2019-08-30 15:44
閱讀 1193·2019-08-30 14:07
閱讀 3557·2019-08-29 17:20
閱讀 1658·2019-08-26 18:35
閱讀 3623·2019-08-26 13:42
閱讀 1895·2019-08-26 11:58
閱讀 1683·2019-08-23 18:33