av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

你真的深知JWT(JSONWebToken)了嗎?

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

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

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

什么是JWT?

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

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

HEADER(頭部)

裝載令牌類型和算法等信息,是JWT的頭部。

  • typ 表示第二部分PAYLOAD是JWT類型
  • alg 表示使用HS256對稱簽名的算法

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

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

  • sub

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

  • exp

          令牌的過期時間戳

  • iat

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

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

SIGNATURE(簽名)

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

SIGNATURE表示對JWT信息的簽名。

作用

可能你覺得,有了HEADER和PAYLOAD就可讓令牌攜帶信息在網(wǎng)絡(luò)中傳輸了,但在網(wǎng)絡(luò)中傳輸這樣的信息體不安全。必須加密簽名,而SIGNATURE就是對信息的簽名結(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)

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

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

JWT令牌怎么用?

  • 有JWT令牌后的通信方式

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

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

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

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

JJWT是開源較方便的JWT工具,開箱即用。封裝Base64URL編碼和對稱HMAC、非對稱RSA的一系列簽名算法。

使用JJWT可方便生成一個經(jīng)過簽名的JWT令牌,以及解析一個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)勢?

計(jì)算代替存儲

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

加密

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

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

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

JWT令牌的缺陷

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

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

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

  • 將每次生成JWT令牌時的秘鑰粒度縮小到用戶級別,即一個用戶一個秘鑰

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

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

令牌的生命周期

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

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

1.令牌自然過期

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

2.訪問令牌失效后可使用刷新令牌請求新令牌,提高用戶使用三方軟件的體驗(yàn)。

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

總結(jié)

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

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

參考

JSON Web Token 入門教程

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

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


網(wǎng)頁題目:你真的深知JWT(JSONWebToken)了嗎?
分享網(wǎng)址:http://uogjgqi.cn/article/dpiisio.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流