日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
你真的深知JWT(JSONWebToken)了嗎?

 頒發(fā)訪(fǎng)問(wèn)令牌是授權(quán)服務(wù)的關(guān)鍵所在,OAuth2.0規(guī)并未約束訪(fǎng)問(wèn)令牌內(nèi)容的生成規(guī)則,只要符合唯一性、不連續(xù)性、不可猜性。

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括易縣網(wǎng)站建設(shè)、易縣網(wǎng)站制作、易縣網(wǎng)頁(yè)制作以及易縣網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,易縣網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到易縣省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

與其是一個(gè)隨機(jī)字符串,不如結(jié)構(gòu)化令牌更有可讀性,用得最多的就是JWT。

什么是JWT?

JWT是一個(gè)開(kāi)放標(biāo)準(zhǔn)(RFC 7519),它定義了一種緊湊自包含的方式,作為JSON對(duì)象安全傳輸信息,結(jié)構(gòu)化封裝生成token的技術(shù)。
結(jié)構(gòu)化后的token可被賦予豐富含義,這是與無(wú)意義的隨機(jī)字符串形式token的最大區(qū)別。

JWT 的結(jié)構(gòu)是怎樣的?

HEADER(頭部)

裝載令牌類(lèi)型和算法等信息,是JWT的頭部。

  • typ 表示第二部分PAYLOAD是JWT類(lèi)型
  • alg 表示使用HS256對(duì)稱(chēng)簽名的算法

PAYLOAD(數(shù)據(jù)體)

JWT的數(shù)據(jù)體,代表了一組數(shù)據(jù)。

  • sub

           令牌的主體,一般設(shè)為資源擁有者的唯一標(biāo)識(shí)

  • exp

          令牌的過(guò)期時(shí)間戳

  • iat

          令牌頒發(fā)的時(shí)間戳

是JWT規(guī)范性的聲明,PAYLOAD表示的一組數(shù)據(jù)允許我們自定義聲明。

SIGNATURE(簽名)

簽名后的JWT整體結(jié)構(gòu),是被.分割的三段內(nèi)容:header.payload.signature。JWT令牌直接用肉眼,看起來(lái)還是毫無(wú)意義,但如果拷貝到 https://jwt.io/ 在線(xiàn)校驗(yàn),即可看到解碼后的有意義數(shù)據(jù)。

SIGNATURE表示對(duì)JWT信息的簽名。

作用

可能你覺(jué)得,有了HEADER和PAYLOAD就可讓令牌攜帶信息在網(wǎng)絡(luò)中傳輸了,但在網(wǎng)絡(luò)中傳輸這樣的信息體不安全。必須加密簽名,而SIGNATURE就是對(duì)信息的簽名結(jié)果,當(dāng)受保護(hù)資源接收到三方軟件的簽名后需要驗(yàn)證令牌的簽名是否合法。

令牌內(nèi)檢

定義

既然授權(quán)服務(wù)頒發(fā)令牌,受保護(hù)資源服務(wù)就要驗(yàn)證令牌。而受保護(hù)資源調(diào)用授權(quán)服務(wù)提供的檢驗(yàn)令牌的服務(wù)的這種校驗(yàn)令牌方式就叫令牌內(nèi)檢。

特點(diǎn)

有時(shí)授權(quán)服務(wù)依賴(lài)DB,然后受保護(hù)資源服務(wù)也依賴(lài)該DB,即“共享DB”。微服務(wù)架構(gòu)下,不同系統(tǒng)間依靠服務(wù)而非DB通信,比如授權(quán)服務(wù)給受保護(hù)資源服務(wù)提供一個(gè)RPC服務(wù):

JWT令牌本身包含了之前所要依賴(lài)DB或依賴(lài)RPC服務(wù)才能拿到的信息,比如某用戶(hù)為某軟件進(jìn)行授權(quán)等信息。

JWT令牌怎么用?

  • 有JWT令牌后的通信方式

授權(quán)服務(wù)發(fā)個(gè)令牌,受保護(hù)資源服務(wù)接這令牌,然后開(kāi)始解析令牌所含信息,無(wú)需再去查詢(xún)DB或RPC調(diào)用。即實(shí)現(xiàn)了令牌內(nèi)檢。

為什么令牌要編碼且簽名?

授權(quán)服務(wù)頒發(fā)JWT后給到xx軟件,xx拿著令牌請(qǐng)求受保護(hù)資源服務(wù),即我在公眾號(hào)里的文章。顯然令牌要在公網(wǎng)傳輸。
所以傳輸過(guò)程令牌還要做到:

  • 編碼,以防亂碼
  • 簽名及加密,以防數(shù)據(jù)信息泄露。

JJWT是開(kāi)源較方便的JWT工具,開(kāi)箱即用。封裝Base64URL編碼和對(duì)稱(chēng)HMAC、非對(duì)稱(chēng)RSA的一系列簽名算法。

使用JJWT可方便生成一個(gè)經(jīng)過(guò)簽名的JWT令牌,以及解析一個(gè)JWT令牌。

 
 
 
 
  1. String sharedTokenSecret="hellooauthhellooauthhellooauthhellooauth";//密鑰 
  2. Key key = new SecretKeySpec(sharedTokenSecret.getBytes(), 
  3.                 SignatureAlgorithm.HS256.getJcaName()); 
  4.  
  5. //生成JWT令牌 
  6. String jwts= 
  7. Jwts.builder().setHeaderParams(headerMap).setClaims(payloadMap).signWith(key,SignatureAlgorithm.HS256).compact() 
  8.  
  9. //解析JWT令牌 
  10. Jws claimsJws =Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(jwts); 
  11. JwsHeader header = claimsJws.getHeader(); 
  12. Claims body = claimsJws.getBody(); 

JWT令牌的優(yōu)勢(shì)?

計(jì)算代替存儲(chǔ)

時(shí)間換空間思想。這種計(jì)算并結(jié)構(gòu)化封裝,減少了“共享DB” 因遠(yuǎn)程調(diào)用而帶來(lái)的網(wǎng)絡(luò)傳輸性能損耗,所以可能節(jié)省時(shí)間。

加密

因JWT令牌內(nèi)部已包含重要信息,所以傳輸過(guò)程都必須被要求密文傳輸,被強(qiáng)制要求加密也保障了傳輸安全性。

增強(qiáng)系統(tǒng)可用性和可伸縮性

JWT令牌,通過(guò)“自編碼”方式包含身份驗(yàn)證需信息,不再需要服務(wù)端額外存儲(chǔ),所以每次的請(qǐng)求都是無(wú)狀態(tài)會(huì)話(huà)。符合盡可能遵循無(wú)狀態(tài)架構(gòu)設(shè)計(jì)原則,即增強(qiáng)了系統(tǒng)可用性和伸縮性。

JWT令牌的缺陷

無(wú)法在使用過(guò)程中修改令牌狀態(tài)。
比如我在使用xx時(shí),可能因?yàn)槟氂性蛐薷牧嗽诠娞?hào)平臺(tái)的密碼或突然取消了給xx的授權(quán)。這時(shí),令牌狀態(tài)就該有變更,將原來(lái)對(duì)應(yīng)令牌置無(wú)效。

但使用JWT時(shí),每次頒發(fā)的令牌都不會(huì)存在服務(wù)端,無(wú)法改變令牌狀態(tài)。這表示JWT令牌在有效期內(nèi)暢通無(wú)阻。

那么可以把JWT令牌存儲(chǔ)在一個(gè)分布式內(nèi)存數(shù)據(jù)庫(kù)比如Redis中嗎?
NO!這違背JWT意義 - 將信息結(jié)構(gòu)化存入令牌本身。通常有兩種方案:

  • 將每次生成JWT令牌時(shí)的秘鑰粒度縮小到用戶(hù)級(jí)別,即一個(gè)用戶(hù)一個(gè)秘鑰

           如此,當(dāng)用戶(hù)取消授權(quán)或修改密碼,可讓該密鑰一起修改。這種方案一般還需配套單獨(dú)密鑰管理服務(wù)

  • 在不提供用戶(hù)主動(dòng)取消授權(quán)的環(huán)境里面,若只考慮修改密碼場(chǎng)景,即可把用戶(hù)密碼作為JWT的密鑰。這也是用戶(hù)粒度。這樣用戶(hù)修改密碼也就相當(dāng)于修改了密鑰。

令牌的生命周期

令牌都有有效期,只是JWT可把有效期的信息存在本身結(jié)構(gòu)。

OAuth 2.0的令牌生命周期,通常有三種情況:

1.令牌自然過(guò)期

該過(guò)程不排除主動(dòng)銷(xiāo)毀令牌的可能,比如令牌被泄露,授權(quán)服務(wù)可讓令牌失效。

2.訪(fǎng)問(wèn)令牌失效后可使用刷新令牌請(qǐng)求新令牌,提高用戶(hù)使用三方軟件的體驗(yàn)。

3.讓三方軟件比如xx,主動(dòng)發(fā)起令牌失效請(qǐng)求,然后授權(quán)服務(wù)收到請(qǐng)求后讓令牌立即失效。
何時(shí)需要該機(jī)制?
比如用戶(hù)和三方軟件間存在一種訂購(gòu)關(guān)系:我購(gòu)買(mǎi)了xx軟件,那么到期或退訂時(shí)且我授權(quán)的token還未到期情況下,就需這樣一種令牌撤回協(xié)議,支持xx主動(dòng)發(fā)起令牌失效請(qǐng)求。作為開(kāi)放平臺(tái),也建議有責(zé)任的三方軟件遵守這樣的一種令牌撤回協(xié)議。

總結(jié)

OAuth 2.0 的核心是授權(quán)服務(wù),沒(méi)有令牌就沒(méi)有OAuth,令牌表示授權(quán)后的結(jié)果。令牌在OAuth 2.0系統(tǒng)中對(duì)于第三方軟件都是不透明的。需要關(guān)心令牌的,是授權(quán)服務(wù)和受保護(hù)資源服務(wù)。

  1. JWT 默認(rèn)是不加密,但也是可以加密的。生成原始 Token 以后,可以用密鑰再加密一次
  2. JWT 不加密的情況下,不能將秘密數(shù)據(jù)寫(xiě)入 JWT
  3. JWT 不僅可以用于認(rèn)證,也可以用于交換信息。有效使用 JWT,可以降低服務(wù)器查詢(xún)數(shù)據(jù)庫(kù)的次數(shù)
  4. JWT 的最大缺點(diǎn)是,由于服務(wù)器不保存 session 狀態(tài),因此無(wú)法在使用過(guò)程中廢止某個(gè) token,或者更改 token 的權(quán)限。也就是說(shuō),一旦 JWT 簽發(fā)了,在到期之前就會(huì)始終有效,除非服務(wù)器部署額外的邏輯
  5. JWT 本身包含了認(rèn)證信息,一旦泄露,任何人都可以獲得該令牌的所有權(quán)限。為了減少盜用,JWT 的有效期應(yīng)該設(shè)置得比較短。對(duì)于一些比較重要的權(quán)限,使用時(shí)應(yīng)該再次對(duì)用戶(hù)進(jìn)行認(rèn)證
  6. 為了減少盜用,JWT 不應(yīng)該使用 HTTP 協(xié)議明碼傳輸,要使用 HTTPS 協(xié)議傳輸

參考

JSON Web Token 入門(mén)教程

在OAuth 2.0中,如何使用JWT結(jié)構(gòu)化令牌?

https://tools.ietf.org/html/rfc6749#section-4.4


文章名稱(chēng):你真的深知JWT(JSONWebToken)了嗎?
分享URL:http://www.dlmjj.cn/article/dpiisio.html