摘要:什么是是一個開放的數(shù)據(jù)交換驗證標準,一般用來做輕量級的鑒權(quán)。由于許多接口設(shè)計是遵循無狀態(tài)的比如,所以是這一套機制的替代方案。組成由三部分組成頭部載荷簽名。
什么是JWT?
JWT(Json Web Token)是一個開放的數(shù)據(jù)交換驗證標準rfc7519(https://tools.ietf.org/html/r...,一般用來做輕量級的API鑒權(quán)。由于許多API接口設(shè)計是遵循無狀態(tài)的(比如Restful),所以JWT是Cookie Session這一套機制的替代方案。
組成JWT由三部分組成頭部(header)、載荷(payload)、簽名(signature)。頭部定義類型和加密方式;載荷部分放不是很重要的數(shù)據(jù);簽名使用定義的加密方式加密base64后的header和payload和一段你自己的加密key。最后的token由base64(header).base64(payload).base64(signatrue)組成。
使用方式平時需要鑒權(quán)的接口需要傳這個token,可以post字段提交,但是一般建議放在header頭中 ,因為JWT一般配合https使用,這樣就萬無一失。
為什么安全?首先token是服務(wù)端簽發(fā),然后驗證時是用同樣加密方式把header、payload和key再加密遍 然后看是不是和簽名一致 如果不一致就說明token是非法的 這里主要靠的是加密(比如HS256)難以被攻破 至少目前吧 另外不得不說這里的加密對服務(wù)器來說是一個開銷 這也是JWT的缺點
使用我很早就聽說過JWT 但那時候還沒用上 感覺近幾年前后端分離思想加速了JWT的使用 MVC前置到前端(VUE、REACT)后端只用提供API API強調(diào)無狀態(tài) 自然而然使用了JWT這套方案
之前做小程序時 沒有絕對使用JWT這套方案 我把它簡化了下
最近開發(fā)的一套項目用的是Laravel做后端提供API服務(wù),所以自然而然使用了JWT,使用的擴展是tymon/jwt-auth 關(guān)于這套擴展機制的具體使用可以參考這篇文章 寫的很不錯:https://laravel-china.org/art...
項目使用時的具體細節(jié) JWT三個時間概念JWT有三個時間概念: 過期時間 寬限時間 刷新時間
上面那文章說token過了過期時間是不可刷新的,但其實是可以刷新的,我這邊使用時可以(開啟了黑名單機制和1min寬限時間) 但是過了刷新時間不能刷新這是肯定的
token刷新可以借用laravel的中間件實現(xiàn)自動刷新 服務(wù)端判斷過期了但是在刷新時間內(nèi)主動刷新一次 并把新的token在Header頭中返回給客戶端
記住我功能我感覺定義刷新時間(比如一個月) + token自動刷新機制這一套就是記住我功能
不能主動銷毀Token默認JWT這套方案好像不可以主動剔除用戶的,因為服務(wù)端不會存token,只是驗證。這和session不一樣。 但是我感覺可以借用黑名單機制 來判斷 中間件中判斷該token在剔除黑名單中就銷毀token并返回鑒權(quán)失敗
單點登錄結(jié)合緩存比如redis存客戶端標識是可以的
多套用戶權(quán)限機制比如客戶端有用戶端和商家端兩套用戶機制(不同表),可以在auth.php定義兩個guard 分別指定對應(yīng)的model Login邏輯多帶帶寫 比如auth("userApi") auth("corpApi") 可以拿到不同的guard 刷新中間件是可以共用的 不過router中的middleware方法可以指定具體的middleware
為什么不同權(quán)限體系的刷新中間件可以公用感覺是jwt-auth實現(xiàn)了這機制 驗證token時會根據(jù)sub字段判斷 我base64decode兩個token的payload后發(fā)現(xiàn)sub一個是1 一個是2
如果有問題歡迎指正!
本文最早發(fā)布于Rootrl"s blog https://rootrl.github.io/2018...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/29483.html
摘要:到這里,基于的前后端分離實現(xiàn)方案就搞定啦四關(guān)于的一些思考實際上,在使用的過程中有一個比較致命的缺點,就是一旦簽發(fā)了,在到期之前就會始終有效,除非服務(wù)器部署額外的邏輯。結(jié)語以上是關(guān)于基于的前后端分離實現(xiàn)方案的總結(jié)和思考。 一、jwt是什么 JWT全稱, JSON Web Token,是一個以JSON為基準的標準規(guī)范。 舉例:服務(wù)器認證以后,生成一個 JSON 對象,發(fā)回給用戶,就像下...
摘要:認證服務(wù)器,即服務(wù)提供商專門用來處理認證的服務(wù)器。它與認證服務(wù)器,可以是同一臺服務(wù)器,也可以是不同的服務(wù)器??蛻舳耸褂蒙弦徊将@得的授權(quán),向認證服務(wù)器申請令牌。認證服務(wù)器對客戶端進行認證以后,確認無誤,同意發(fā)放令牌。 最近想做個小程序,需要用到授權(quán)認證流程。以前項目都是用的 OAuth2 認證,但是Sanic 使用OAuth2 不太方便,就想試一下 JWT 的認證方式。這一篇主要內(nèi)容是 ...
摘要:頭部需要一個頭部,用于描述關(guān)于該的最基本的信息,例如其類型以及簽名所用的算法等。簽發(fā)者需要準備一個可以確認自己身份的字符串,這個字符串我們稱之為。 什么是 jwt ? JWT 全稱叫 JSON Web Token, 是一個非常輕巧的規(guī)范。這個規(guī)范允許我們使用 JWT 在用戶和服務(wù)器之間傳遞安全可靠的信息。 jwt 使用場景 jwt 用圖廣泛,例如授權(quán)、鑒權(quán)等。具體一點的話,假如我們有一...
摘要:創(chuàng)建應(yīng)用有很多方法去創(chuàng)建項目,官方也推薦用在線項目創(chuàng)建工具可以方便選擇你要用的組件,命令行工具當(dāng)然也可以。對于開發(fā)人員最大的好處在于可以對應(yīng)用進行自動配置。 使用JWT保護你的Spring Boot應(yīng)用 - Spring Security實戰(zhàn) 作者 freewolf 原創(chuàng)文章轉(zhuǎn)載請標明出處 關(guān)鍵詞 Spring Boot、OAuth 2.0、JWT、Spring Security、SS...
摘要:當(dāng)使用一個時,其中一個挑戰(zhàn)就是認證。在傳統(tǒng)的應(yīng)用中,服務(wù)端成功的返回一個響應(yīng)依賴于兩件事。通常包括將發(fā)送的憑證與存儲的憑證進行檢查。第一種是使用請求來通過驗證,使服務(wù)端發(fā)送帶有的響應(yīng)。 做了這么長時間的web開發(fā),從JAVA EE中的jsf,spring,hibernate框架,到spring web MVC,到用php框架thinkPHP,到現(xiàn)在的nodejs,我自己的看法是越來越喜...
閱讀 1468·2021-09-26 09:55
閱讀 1981·2019-08-30 12:45
閱讀 1142·2019-08-29 11:20
閱讀 3614·2019-08-26 11:33
閱讀 3503·2019-08-26 10:55
閱讀 1749·2019-08-23 17:54
閱讀 2469·2019-08-23 15:55
閱讀 2403·2019-08-23 14:23