亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

淺析 JWT

2023-08-07 01:28:50
6
0

什么是 JWT ?

JWT 全稱為 Json Web Token,是(shi)一(yi)個開(kai)放的(de)行業標準(RFC 7519),它定義(yi)了一(yi)種簡潔的(de)、自包含的(de)協議(yi)格式,用于在通信雙方傳遞(di) Json 對象,傳遞(di)的(de)信息經過數字簽(qian)名(ming),可以被(bei)驗(yan)證和信任。

什么時候使用 JWT ?

JWT 用(yong)途廣泛,例如 OAuth2、用(yong)戶授(shou)權(quan)、服(fu)務器(qi)(qi)通信(xin)鑒權(quan)等。比如在(zai)用(yong)戶授(shou)權(quan)的(de)場景中,服(fu)務器(qi)(qi)端(duan)可在(zai)用(yong)戶登錄后生成符合 JWT 規范的(de) AccessToken,并發送回用(yong)戶端(duan),之后用(yong)戶端(duan)可攜帶這個(ge) AccessToken 向服(fu)務器(qi)(qi)請求授(shou)權(quan)資源。

JWT 里有什么?

我們先(xian)來看(kan)看(kan) 標準的 JWT 長什么樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

可(ke)見,JWT 包含三段信(xin)息(xi),信(xin)息(xi)之間使(shi)用點號(.)分隔。

這三(san)段(duan)信(xin)息分(fen)別為頭部(bu)(Header)、載荷(he)(Payload)、簽名(Signature),下面我們(men)來(lai)說說這幾部(bu)分(fen)信(xin)息。

頭部(Header)

頭部信息為(wei) Base64 編碼(ma)的字(zi)符(fu)串(chuan),解碼(ma)后為(wei) Json 格式的字(zi)符(fu)串(chuan),示例如(ru)下:

{
  "alg": "HS256",
  "typ": "JWT"
}

該部分包含兩個信息:當前 JWT 使用的(de)簽名算法,比如 HMAC SHA256 或者 RSA,當前 JWT的(de)類型(xing),即 JWT。

載荷(Payload)

載(zai)荷跟頭(tou)部信息一樣,也(ye)是為 Base64 編碼(ma)的字符串,解碼(ma)后(hou)示例如下:

 
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
 

該部分包含 token 的信息(claims),這里包含一些約定的字段以及 JWT 生成時生產方自定義的字段,其中,約定的字段是非必須的,但是 JWT 規范中推薦攜帶上。規范中約定的字段有: iss(生成方)、exp(過期時間)、sub(主體)、iat(生成時間)等,具體可查看 JWT規范約定字段說明。自定義(yi)(yi)字段(duan)(duan)則可由生(sheng)成方定義(yi)(yi),字段(duan)(duan)名(ming)稱不要(yao)(yao)和規范約(yue)定的字段(duan)(duan)沖突就(jiu)行。需(xu)要(yao)(yao)注(zhu)意的是不要(yao)(yao)在這(zhe)部分信(xin)(xin)(xin)息中存放(fang)敏感信(xin)(xin)(xin)息,因為這(zhe)些信(xin)(xin)(xin)息是沒有加密(mi)的,只(zhi)要(yao)(yao)拿到(dao)(dao) jwt 使用 Base64 解碼就(jiu)能獲取到(dao)(dao)。

簽名(Signature)

簽名(ming)部分用(yong)于信息的接收方確認當前 JWT 的合法性。要創建簽名(ming),你(ni)需要用(yong)到頭部、載荷(he)和(he)(he)密鑰(yao),首先將簽名(ming)方法寫在頭部信息里(li),然后對頭部和(he)(he)載荷(he)信息進(jin)行簽名(ming)。舉個(ge)例子,如果使用(yong) HMAC SHA256 算法,則該簽名(ming)可以通過以下方式生成:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
 

簽名可(ke)以(yi)保證 JWT 在(zai)傳輸(shu)的過程中(zhong)沒有被篡改,還有如(ru)果使(shi)用 RSA 做簽名,也(ye)可(ke)驗證 JWT 是否真的是生成者發來(lai)的,具有防(fang)抵(di)賴性。

為什么使用 JWT?

首(shou)先,JWT 由 Base64-URL 字符串并以點號(.)組成,非常適合在(zai) HTML 和 HTTP 環境中傳輸和解析(xi),Json 格式相對于 XML 也顯得更加緊(jin)湊和簡(jian)潔。同時,JWT 在(zai)傳輸過(guo)程(cheng)是(shi)無狀態(tai)的,更契(qi)合當前(qian)分(fen)布式應用場景。

JWT 如何使用?

在(zai)用(yong)戶(hu)(hu)鑒權場景中,當用(yong)戶(hu)(hu)使用(yong)賬號密碼等方式成(cheng)功登錄后(hou)(hou),服(fu)務(wu)端為當前用(yong)戶(hu)(hu)生(sheng)成(cheng)一個(ge)(ge) JWT 并返回,至此(ci)之后(hou)(hou),這個(ge)(ge) JWT 即為用(yong)戶(hu)(hu)的(de)鑒權標識(shi),后(hou)(hou)續服(fu)務(wu)端通過驗(yan)證 JWT 的(de)合法性判(pan)斷是否信(xin)任用(yong)戶(hu)(hu)的(de)請(qing)求。

需要(yao)注意(yi)的是,服務端需要(yao)為這個 JWT 設置一個過期(qi)時間,以免 JWT 泄露造成安全問題。還有就是不(bu)要(yao)在 JWT 中存放敏(min)感信息,因(yin)為 JWT 并(bing)不(bu)會(hui)做數據加密。

當用戶想要訪問受保護的(de)資源時,必須(xu)在(zai)請求中攜(xie)帶 JWT,通常(chang)的(de)做法(fa)是在(zai) HTTP 頭 Authorization 中使用 Bearer 協議,內容如下所(suo)示:

 
Authorization: Bearer <token>
 

這是一種(zhong)無狀態的鑒權機制,服務(wu)端通過校驗 Authorization 頭中的 JWT,如(ru)果存在(zai),則這個(ge)用戶可以訪問(wen)受保護的資源(yuan),如(ru)果這個(ge) JWT 包(bao)含一些必要的用戶信息,這個(ge)方式在(zai)某些情(qing)況(kuang)下還(huan)可以減少(shao)從數據庫讀取用戶信息的次數,提升訪問(wen)速度。

使用 Header 傳輸(shu) JWT,你要(yao)注(zhu)意(yi)不要(yao)存放過(guo)多的(de)信息到 JWT,這會(hui)導致(zhi) JWT 過(guo)于(yu)臃(yong)腫,影響傳輸(shu)速(su)度(du),甚(shen)至還有一些服務器會(hui)限制 Header 的(de)長度(du)不超過(guo) 8KB,真的(de)要(yao)存儲這么多信息的(de)話,請考慮(lv)使用別的(de)方(fang)案。

總結

在文章(zhang)中我(wo)們了(le)解了(le)什(shen)么(me)是 JWT、JWT 的(de)(de)(de)組(zu)成及原理(li)以(yi)及如何使用(yong)(yong)(yong)(yong) JWT,JWT 提供一個簡潔并(bing)且保證安(an)全(quan)的(de)(de)(de)規范(fan)用(yong)(yong)(yong)(yong)于信息的(de)(de)(de)傳輸(shu),它比基(ji)于 XML 的(de)(de)(de) SAML 更加緊(jin)湊和(he)(he)(he)簡潔,更加適用(yong)(yong)(yong)(yong)于 HTML 和(he)(he)(he) HTTP 環境的(de)(de)(de)傳輸(shu)和(he)(he)(he)解析,在安(an)全(quan)方面,JWT 使用(yong)(yong)(yong)(yong)自洽的(de)(de)(de)簽名算(suan)法(fa)(fa),可以(yi)使用(yong)(yong)(yong)(yong)相對簡單的(de)(de)(de)對稱算(suan)法(fa)(fa)以(yi)及更高安(an)全(quan)性的(de)(de)(de)非對稱公(gong)私鑰(yao)算(suan)法(fa)(fa)。JWT 在用(yong)(yong)(yong)(yong)戶鑒權、信息傳輸(shu)及交換等場(chang)景具有很大的(de)(de)(de)發(fa)揮空間。

 

0條評論
0 / 1000
黃****浪
4文章數
0粉絲數(shu)
黃****浪
4 文章 | 0 粉絲
黃****浪
4文章數
0粉(fen)絲數
黃****浪
4 文章 | 0 粉絲
原創

淺析 JWT

2023-08-07 01:28:50
6
0

什么是 JWT ?

JWT 全稱為 Json Web Token,是(shi)一個開放的行業標準(zhun)(RFC 7519),它定(ding)義了一種簡(jian)潔的、自包(bao)含的協議格式(shi),用于在通信(xin)(xin)雙方(fang)傳遞 Json 對象,傳遞的信(xin)(xin)息經過數(shu)字簽名(ming),可以(yi)被驗證(zheng)和信(xin)(xin)任。

什么時候使用 JWT ?

JWT 用(yong)(yong)途(tu)廣(guang)泛,例如 OAuth2、用(yong)(yong)戶(hu)(hu)授(shou)(shou)權(quan)(quan)、服務器(qi)(qi)通(tong)信鑒權(quan)(quan)等。比如在(zai)用(yong)(yong)戶(hu)(hu)授(shou)(shou)權(quan)(quan)的場景中,服務器(qi)(qi)端(duan)可在(zai)用(yong)(yong)戶(hu)(hu)登錄后(hou)生成符合(he) JWT 規(gui)范的 AccessToken,并發送回(hui)用(yong)(yong)戶(hu)(hu)端(duan),之后(hou)用(yong)(yong)戶(hu)(hu)端(duan)可攜帶這個 AccessToken 向服務器(qi)(qi)請求授(shou)(shou)權(quan)(quan)資源。

JWT 里有什么?

我們(men)先來看看 標準的 JWT 長什么樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

可見,JWT 包含三(san)段信息(xi)(xi),信息(xi)(xi)之間使用點號(.)分(fen)隔。

這三段(duan)信息分(fen)別為頭部(bu)(Header)、載荷(Payload)、簽名(Signature),下面我們來說說這幾部(bu)分(fen)信息。

頭部(Header)

頭(tou)部信息為 Base64 編碼的(de)字符(fu)串,解(jie)碼后為 Json 格式的(de)字符(fu)串,示例如(ru)下:

{
  "alg": "HS256",
  "typ": "JWT"
}

該部(bu)分(fen)包(bao)含兩個信息:當(dang)前 JWT 使用的簽名算法,比如 HMAC SHA256 或者 RSA,當(dang)前 JWT的類(lei)型,即 JWT。

載荷(Payload)

載(zai)荷跟頭部(bu)信息一樣,也是(shi)為 Base64 編(bian)碼(ma)的字符串,解碼(ma)后(hou)示例如下(xia):

 
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
 

該部分包含 token 的信息(claims),這里包含一些約定的字段以及 JWT 生成時生產方自定義的字段,其中,約定的字段是非必須的,但是 JWT 規范中推薦攜帶上。規范中約定的字段有: iss(生成方)、exp(過期時間)、sub(主體)、iat(生成時間)等,具體可查看 JWT規范約定字段說明。自(zi)定義(yi)字段則可由(you)生成(cheng)方定義(yi),字段名稱不要和規范(fan)約定的字段沖突就(jiu)行。需要注意的是(shi)不要在這部分信(xin)息(xi)中存放敏感(gan)信(xin)息(xi),因為這些信(xin)息(xi)是(shi)沒有加(jia)密的,只要拿(na)到(dao) jwt 使用 Base64 解碼就(jiu)能獲取到(dao)。

簽名(Signature)

簽(qian)名部(bu)分(fen)用于信息(xi)的接收方確認(ren)當前 JWT 的合法(fa)性。要創(chuang)建簽(qian)名,你需(xu)要用到頭部(bu)、載荷和密鑰(yao),首先將簽(qian)名方法(fa)寫在頭部(bu)信息(xi)里,然后對頭部(bu)和載荷信息(xi)進行(xing)簽(qian)名。舉個例子,如果使用 HMAC SHA256 算法(fa),則該簽(qian)名可以(yi)通(tong)過以(yi)下方式生(sheng)成(cheng):

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
 

簽名可以保證(zheng) JWT 在傳輸的(de)過(guo)程中(zhong)沒有被篡改,還(huan)有如果使用 RSA 做簽名,也可驗(yan)證(zheng) JWT 是否(fou)真的(de)是生成者(zhe)發來的(de),具有防(fang)抵(di)賴性(xing)。

為什么使用 JWT?

首先,JWT 由 Base64-URL 字(zi)符串(chuan)并(bing)以點號(.)組成,非常適合在 HTML 和 HTTP 環境中(zhong)傳(chuan)輸和解(jie)析,Json 格式(shi)相對于 XML 也(ye)顯得更(geng)加緊湊和簡潔。同時,JWT 在傳(chuan)輸過程是無狀(zhuang)態的(de),更(geng)契合當前分布式(shi)應用場(chang)景(jing)。

JWT 如何使用?

在用(yong)戶(hu)(hu)鑒(jian)權場景(jing)中,當(dang)用(yong)戶(hu)(hu)使(shi)用(yong)賬號密碼等方式成功登錄(lu)后(hou),服務端為(wei)當(dang)前用(yong)戶(hu)(hu)生成一個 JWT 并返回(hui),至此之后(hou),這個 JWT 即為(wei)用(yong)戶(hu)(hu)的(de)鑒(jian)權標(biao)識,后(hou)續(xu)服務端通過驗證 JWT 的(de)合法性判(pan)斷是否信任用(yong)戶(hu)(hu)的(de)請求(qiu)。

需(xu)要(yao)注(zhu)意的是,服務(wu)端需(xu)要(yao)為(wei)(wei)這個(ge) JWT 設置(zhi)一(yi)個(ge)過(guo)期時間,以(yi)免 JWT 泄(xie)露造成安全問題(ti)。還有就是不要(yao)在 JWT 中存放敏感信息,因為(wei)(wei) JWT 并不會做數據加密。

當(dang)用(yong)戶想要訪問(wen)受保護的(de)(de)資源時,必須在(zai)請(qing)求(qiu)中(zhong)攜帶 JWT,通(tong)常(chang)的(de)(de)做(zuo)法是在(zai) HTTP 頭 Authorization 中(zhong)使用(yong) Bearer 協議,內容如下所示(shi):

 
Authorization: Bearer <token>
 

這(zhe)(zhe)是一(yi)種無狀態的(de)(de)鑒權(quan)機制,服務端通過(guo)校驗 Authorization 頭中(zhong)的(de)(de) JWT,如果存在(zai),則這(zhe)(zhe)個用戶(hu)可以訪問受保護的(de)(de)資源,如果這(zhe)(zhe)個 JWT 包(bao)含一(yi)些必要的(de)(de)用戶(hu)信息(xi),這(zhe)(zhe)個方式在(zai)某(mou)些情況下還可以減少從數據庫讀取用戶(hu)信息(xi)的(de)(de)次數,提(ti)升訪問速(su)度。

使(shi)(shi)用 Header 傳輸(shu) JWT,你要注意不要存(cun)放過多的(de)(de)信息到 JWT,這會導致 JWT 過于臃腫,影響傳輸(shu)速(su)度,甚至還有一些服(fu)務器會限制 Header 的(de)(de)長度不超過 8KB,真的(de)(de)要存(cun)儲(chu)這么(me)多信息的(de)(de)話,請考慮使(shi)(shi)用別的(de)(de)方案(an)。

總結

在(zai)(zai)文章中我(wo)們了解(jie)(jie)了什(shen)么是 JWT、JWT 的(de)(de)組成及原(yuan)理以及如何使(shi)用(yong) JWT,JWT 提供一個簡潔并且保(bao)證安(an)全的(de)(de)規范用(yong)于信(xin)息(xi)的(de)(de)傳(chuan)輸,它比基于 XML 的(de)(de) SAML 更(geng)加緊湊和(he)簡潔,更(geng)加適用(yong)于 HTML 和(he) HTTP 環境的(de)(de)傳(chuan)輸和(he)解(jie)(jie)析(xi),在(zai)(zai)安(an)全方面,JWT 使(shi)用(yong)自洽(qia)的(de)(de)簽(qian)名算(suan)法(fa),可以使(shi)用(yong)相對簡單的(de)(de)對稱算(suan)法(fa)以及更(geng)高(gao)安(an)全性的(de)(de)非對稱公(gong)私鑰算(suan)法(fa)。JWT 在(zai)(zai)用(yong)戶鑒權、信(xin)息(xi)傳(chuan)輸及交換等場景(jing)具有很大的(de)(de)發揮(hui)空間。

 

文章來自個人專欄
文章 | 訂(ding)閱
0條評論
0 / 1000
請輸入你的評論
0
0