免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
來(lái),科普一下JWT

1. JSON Web Token是什么

JSON Web Token (JWT)是一個(gè)開(kāi)放標(biāo)準(zhǔn)(RFC 7519),它定義了一種緊湊的、自包含的方式,用于作為JSON對(duì)象在各方之間安全地傳輸信息。該信息可以被驗(yàn)證和信任,因?yàn)樗菙?shù)字簽名的。

2. 什么時(shí)候你應(yīng)該用JSON Web Tokens

下列場(chǎng)景中使用JSON Web Token是很有用的:

Authorization (授權(quán)) : 這是使用JWT的最常見(jiàn)場(chǎng)景。一旦用戶登錄,后續(xù)每個(gè)請(qǐng)求都將包含JWT,允許用戶訪問(wèn)該令牌允許的路由、服務(wù)和資源。單點(diǎn)登錄是現(xiàn)在廣泛使用的JWT的一個(gè)特性,因?yàn)樗拈_(kāi)銷很小,并且可以輕松地跨域使用。

Information Exchange (信息交換) : 對(duì)于安全的在各方之間傳輸信息而言,JSON Web Tokens無(wú)疑是一種很好的方式。因?yàn)镴WTs可以被簽名,例如,用公鑰/私鑰對(duì),你可以確定發(fā)送人就是它們所說(shuō)的那個(gè)人。另外,由于簽名是使用頭和有效負(fù)載計(jì)算的,您還可以驗(yàn)證內(nèi)容沒(méi)有被篡改。

3. JSON Web Token的結(jié)構(gòu)是什么樣的

JSON Web Token由三部分組成,它們之間用圓點(diǎn)(.)連接。這三部分分別是:

  • Header

  • Payload

  • Signature

因此,一個(gè)典型的JWT看起來(lái)是這個(gè)樣子的:

xxxxx.yyyyy.zzzzz

接下來(lái),具體看一下每一部分:

Header

header典型的由兩部分組成:token的類型(“JWT”)和算法名稱(比如:HMAC SHA256或者RSA等等)。

例如:

然后,用Base64對(duì)這個(gè)JSON編碼就得到JWT的第一部分

Payload

JWT的第二部分是payload,它包含聲明(要求)。聲明是關(guān)于實(shí)體(通常是用戶)和其他數(shù)據(jù)的聲明。聲明有三種類型: registered, public 和 private。

Registered claims : 這里有一組預(yù)定義的聲明,它們不是強(qiáng)制的,但是推薦。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。

Public claims : 可以隨意定義。

Private claims : 用于在同意使用它們的各方之間共享信息,并且不是注冊(cè)的或公開(kāi)的聲明。

下面是一個(gè)例子:

對(duì)payload進(jìn)行Base64編碼就得到JWT的第二部分

注意,不要在JWT的payload或header中放置敏感信息,除非它們是加密的。

Signature

為了得到簽名部分,你必須有編碼過(guò)的header、編碼過(guò)的payload、一個(gè)秘鑰,簽名算法是header中指定的那個(gè),然對(duì)它們簽名即可。

例如:

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

簽名是用于驗(yàn)證消息在傳遞過(guò)程中有沒(méi)有被更改,并且,對(duì)于使用私鑰簽名的token,它還可以驗(yàn)證JWT的發(fā)送方是否為它所稱的發(fā)送方。

看一張官網(wǎng)的圖就明白了:

4. JSON Web Tokens是如何工作的

在認(rèn)證的時(shí)候,當(dāng)用戶用他們的憑證成功登錄以后,一個(gè)JSON Web Token將會(huì)被返回。此后,token就是用戶憑證了,你必須非常小心以防止出現(xiàn)安全問(wèn)題。一般而言,你保存令牌的時(shí)候不應(yīng)該超過(guò)你所需要它的時(shí)間。

無(wú)論何時(shí)用戶想要訪問(wèn)受保護(hù)的路由或者資源的時(shí)候,用戶代理(通常是瀏覽器)都應(yīng)該帶上JWT,典型的,通常放在Authorization header中,用Bearer schema。

header應(yīng)該看起來(lái)是這樣的:

Authorization: Bearer

服務(wù)器上的受保護(hù)的路由將會(huì)檢查Authorization header中的JWT是否有效,如果有效,則用戶可以訪問(wèn)受保護(hù)的資源。如果JWT包含足夠多的必需的數(shù)據(jù),那么就可以減少對(duì)某些操作的數(shù)據(jù)庫(kù)查詢的需要,盡管可能并不總是如此。

如果token是在授權(quán)頭(Authorization header)中發(fā)送的,那么跨源資源共享(CORS)將不會(huì)成為問(wèn)題,因?yàn)樗皇褂胏ookie。

下面這張圖顯示了如何獲取JWT以及使用它來(lái)訪問(wèn)APIs或者資源:

  • 應(yīng)用(或者客戶端)想授權(quán)服務(wù)器請(qǐng)求授權(quán)。例如,如果用授權(quán)碼流程的話,就是/oauth/authorize

  • 當(dāng)授權(quán)被許可以后,授權(quán)服務(wù)器返回一個(gè)access token給應(yīng)用

  • 應(yīng)用使用access token訪問(wèn)受保護(hù)的資源(比如:API)

5. 基于Token的身份認(rèn)證 與 基于服務(wù)器的身份認(rèn)證

5.1. 基于服務(wù)器的身份認(rèn)證

在討論基于Token的身份認(rèn)證是如何工作的以及它的好處之前,我們先來(lái)看一下以前我們是怎么做的:

HTTP協(xié)議是無(wú)狀態(tài)的,也就是說(shuō),如果我們已經(jīng)認(rèn)證了一個(gè)用戶,那么他下一次請(qǐng)求的時(shí)候,服務(wù)器不知道我是誰(shuí),我們必須再次認(rèn)證

傳統(tǒng)的做法是將已經(jīng)認(rèn)證過(guò)的用戶信息存儲(chǔ)在服務(wù)器上,比如Session。用戶下次請(qǐng)求的時(shí)候帶著Session ID,然后服務(wù)器以此檢查用戶是否認(rèn)證過(guò)。

這種基于服務(wù)器的身份認(rèn)證方式存在一些問(wèn)題:

Sessions : 每次用戶認(rèn)證通過(guò)以后,服務(wù)器需要?jiǎng)?chuàng)建一條記錄保存用戶信息,通常是在內(nèi)存中,隨著認(rèn)證通過(guò)的用戶越來(lái)越多,服務(wù)器的在這里的開(kāi)銷就會(huì)越來(lái)越大。

Scalability : 由于Session是在內(nèi)存中的,這就帶來(lái)一些擴(kuò)展性的問(wèn)題。

CORS : 當(dāng)我們想要擴(kuò)展我們的應(yīng)用,讓我們的數(shù)據(jù)被多個(gè)移動(dòng)設(shè)備使用時(shí),我們必須考慮跨資源共享問(wèn)題。當(dāng)使用AJAX調(diào)用從另一個(gè)域名下獲取資源時(shí),我們可能會(huì)遇到禁止請(qǐng)求的問(wèn)題。

CSRF : 用戶很容易受到CSRF攻擊。

5.2. JWT與Session的差異

相同點(diǎn)是,它們都是存儲(chǔ)用戶信息;然而,Session是在服務(wù)器端的,而JWT是在客戶端的。

Session方式存儲(chǔ)用戶信息的最大問(wèn)題在于要占用大量服務(wù)器內(nèi)存,增加服務(wù)器的開(kāi)銷。

而JWT方式將用戶狀態(tài)分散到了客戶端中,可以明顯減輕服務(wù)端的內(nèi)存壓力。

Session的狀態(tài)是存儲(chǔ)在服務(wù)器端,客戶端只有session id;而Token的狀態(tài)是存儲(chǔ)在客戶端。

5.3. 基于Token的身份認(rèn)證是如何工作的

基于Token的身份認(rèn)證是無(wú)狀態(tài)的,服務(wù)器或者Session中不會(huì)存儲(chǔ)任何用戶信息。

沒(méi)有會(huì)話信息意味著應(yīng)用程序可以根據(jù)需要擴(kuò)展和添加更多的機(jī)器,而不必?fù)?dān)心用戶登錄的位置。

雖然這一實(shí)現(xiàn)可能會(huì)有所不同,但其主要流程如下:

  • 用戶攜帶用戶名和密碼請(qǐng)求訪問(wèn)

  • 服務(wù)器校驗(yàn)用戶憑據(jù)

  • 應(yīng)用提供一個(gè)token給客戶端

  • 客戶端存儲(chǔ)token,并且在隨后的每一次請(qǐng)求中都帶著它

  • 服務(wù)器校驗(yàn)token并返回?cái)?shù)據(jù)

注意:

  • 每一次請(qǐng)求都需要token

  • Token應(yīng)該放在請(qǐng)求header中

  • 我們還需要將服務(wù)器設(shè)置為接受來(lái)自所有域的請(qǐng)求,用Access-Control-Allow-Origin: *

5.4. 用Token的好處

無(wú)狀態(tài)和可擴(kuò)展性:Tokens存儲(chǔ)在客戶端。完全無(wú)狀態(tài),可擴(kuò)展。我們的負(fù)載均衡器可以將用戶傳遞到任意服務(wù)器,因?yàn)樵谌魏蔚胤蕉紱](méi)有狀態(tài)或會(huì)話信息。

安全:Token不是Cookie。(The token, not a cookie.)每次請(qǐng)求的時(shí)候Token都會(huì)被發(fā)送。而且,由于沒(méi)有Cookie被發(fā)送,還有助于防止CSRF攻擊。即使在你的實(shí)現(xiàn)中將token存儲(chǔ)到客戶端的Cookie中,這個(gè)Cookie也只是一種存儲(chǔ)機(jī)制,而非身份認(rèn)證機(jī)制。沒(méi)有基于會(huì)話的信息可以操作,因?yàn)槲覀儧](méi)有會(huì)話!

還有一點(diǎn),token在一段時(shí)間以后會(huì)過(guò)期,這個(gè)時(shí)候用戶需要重新登錄。這有助于我們保持安全。還有一個(gè)概念叫token撤銷,它允許我們根據(jù)相同的授權(quán)許可使特定的token甚至一組token無(wú)效。

5.5. JWT與OAuth的區(qū)別

  • OAuth2是一種授權(quán)框架 ,JWT是一種認(rèn)證協(xié)議

  • 無(wú)論使用哪種方式切記用HTTPS來(lái)保證數(shù)據(jù)的安全性

  • OAuth2用在使用第三方賬號(hào)登錄的情況(比如使用weibo, qq, github登錄某個(gè)app),而JWT是用在前后端分離, 需要簡(jiǎn)單的對(duì)后臺(tái)API進(jìn)行保護(hù)時(shí)使用。

作者:狂亂的貴公子

cnblogs.com/cjsblog/p/9277677.html

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
教你如何利用Token實(shí)現(xiàn)分布式Session!
微服務(wù)架構(gòu)下的安全認(rèn)證與鑒權(quán)
基于前后端分離的身份認(rèn)證方式
第 82 天:Python Web 開(kāi)發(fā)之 JWT 簡(jiǎn)介
一步步帶你了解前后端分離利器之JWT
JSON Web Token 入門(mén)教程
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服