jwt,accesstoken、refresh token詳解
JWT(json web token)
概念
JWT定義了一種緊湊的,自包含的形式,被用作在網(wǎng)絡(luò)中安全的傳輸信息
格式
例如:xxxx.yyyyyyy.zzz
根據(jù).分割,可以得到三部分,header,payload,signature。每部分可以使用Base64解碼,就是一個(gè)JSON對(duì)象。
payload中會(huì)包含當(dāng)前jwt的頒發(fā)者信息,JWT有效期,用戶的憑證,權(quán)限信息,和用戶自定義的信息等等。由于JWT是明文信息,所以不適合將一些敏感信息保存在JWT中
流程
客戶端發(fā)起請(qǐng)求登陸,攜帶用戶名和密碼;
服務(wù)端驗(yàn)證身份,根據(jù)算法,將用戶標(biāo)識(shí)符打包生成token
服務(wù)器返回JWT信息給游覽器,JWT不包含敏感信息;
客戶端發(fā)起請(qǐng)求獲取用戶資料,把剛剛拿到的token一起發(fā)送給服務(wù)器;
服務(wù)器發(fā)現(xiàn)數(shù)據(jù)中有token,驗(yàn)明正身;
服務(wù)器返回該用戶的用戶資料;
JWT的6個(gè)缺點(diǎn)
1、JWT默認(rèn)不加密,但可以加密。生成原始令牌后,可以使用改令牌再次對(duì)其進(jìn)行加密。
2、當(dāng)JWT未加密方法是,一些私密數(shù)據(jù)無(wú)法通過(guò)JWT傳輸。
3、JWT不僅可用于認(rèn)證,還可用于信息交換。善用JWT有助于減少服務(wù)器請(qǐng)求數(shù)據(jù)庫(kù)的次數(shù)。
4、JWT的最大缺點(diǎn)是服務(wù)器不保存會(huì)話狀態(tài),所以在使用期間不可能取消令牌或更改令牌的權(quán)限。也就是說(shuō),一旦JWT簽發(fā),在有效期內(nèi)將會(huì)一直有效。
5、JWT本身包含認(rèn)證信息,因此一旦信息泄露,任何人都可以獲得令牌的所有權(quán)限。為了減少盜用,JWT的有效期不宜設(shè)置太長(zhǎng)。對(duì)于某些重要操作,用戶在使用時(shí)應(yīng)該每次都進(jìn)行進(jìn)行身份驗(yàn)證。
6、為了減少盜用和竊取,JWT不建議使用HTTP協(xié)議來(lái)傳輸代碼,而是使用加密的HTTPS協(xié)議進(jìn)行傳輸。
安全在哪體現(xiàn)
JWT的安全性,說(shuō)的是自身信息是防篡改,體現(xiàn)在它的簽名部分signature。我們可以在生成JWT的時(shí)候,使用數(shù)字證書進(jìn)行簽名,采用非對(duì)稱加密,可以很大程度的保證JWT的安全性。JWT默認(rèn)是非加密的。
但是,JWT一經(jīng)頒發(fā),將無(wú)法回收,如果發(fā)生泄漏,將無(wú)法組織,這也是眾所周知的JWT最大的問題。
JWT也是客服端-服務(wù)器在用戶身份信息認(rèn)證使用token形式的一種體現(xiàn)。jwt將用戶身份信息認(rèn)證保存在客戶端,服務(wù)端也就不用維護(hù)用戶狀態(tài),大大減輕了服務(wù)器的壓力??蛻舳嗣看握?qǐng)求中,只需要攜帶這個(gè)JWT信息,
服務(wù)器根據(jù)JWT信息進(jìn)行身份認(rèn)證即可。
OAuth2(認(rèn)證)
由上述可知,JWT存在頒發(fā)不可回收問題。如果JWT信息發(fā)生泄漏,就可以憑借此信息一直訪問服務(wù)器信息,
只有等到JWT自動(dòng)過(guò)期,用戶的信息才會(huì)失效。
那么我們?cè)趺淳S護(hù)用戶身份信息呢?
我們可能最先想到,使用Redis(數(shù)據(jù)庫(kù))保存JWT信息,將信息維護(hù)服務(wù)器。
如果我們真的使用這種方式,那不就又回到了最初的使用服務(wù)端保存token的方式了嗎?那這個(gè)JWT還有存在的必要嗎?
第二種方式,我們盡可能短的設(shè)置JWT的有效時(shí)間,那么,就算用戶的JWT信息泄漏了,對(duì)系統(tǒng)的訪問時(shí)間也就盡可能的短了。
而在OAuth2中提出了access_token和refresh_token這兩個(gè)概念
access_token
用于在客戶端的一般請(qǐng)求中,使用此JWT信息驗(yàn)證用戶身份。它的有效期通常設(shè)置的很短。
refresh_token
用于在access_token失效時(shí),交換新的access_token。
基本流程
客戶端向從資源所有者請(qǐng)求授權(quán)。
客戶端收到授權(quán)許可,資源所有者給客戶端頒發(fā)授權(quán)許可(比如授權(quán)碼code)
客戶端與授權(quán)服務(wù)器進(jìn)行身份認(rèn)證并出示授權(quán)許可(比如授權(quán)碼code)請(qǐng)求訪問令牌。
授權(quán)服務(wù)器驗(yàn)證客戶端身份并驗(yàn)證授權(quán)許可,若有效則頒發(fā)訪問令牌(accept token)。
客戶端從資源服務(wù)器請(qǐng)求受保護(hù)資源并出示訪問令牌(accept token)進(jìn)行身份驗(yàn)證。
資源服務(wù)器驗(yàn)證訪問令牌(accept token),若有效則滿足該請(qǐng)求。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-604706.html
圖解
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-604706.html
到了這里,關(guān)于jwt,accesstoken、refresh token詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!