日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

session传递参数_JWT与Session的比较

發(fā)布時(shí)間:2024/7/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 session传递参数_JWT与Session的比较 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如今,越來(lái)越多的項(xiàng)目開(kāi)始采用JWT作為認(rèn)證授權(quán)機(jī)制,那么它和之前的Session究竟有什么區(qū)別呢?今天就讓我們來(lái)了解一下。

JWT是什么

定義

JSON Web Token(JWT)是一個(gè)開(kāi)放標(biāo)準(zhǔn)(RFC 7519),它定義了一種緊湊和自包含的方式,用于在各方之間作為JSON對(duì)象安全地傳輸信息。作為標(biāo)準(zhǔn),它沒(méi)有提供技術(shù)實(shí)現(xiàn),但是大部分的語(yǔ)言平臺(tái)都有按照它規(guī)定的內(nèi)容提供了自己的技術(shù)實(shí)現(xiàn),所以實(shí)際在用的時(shí)候,只要根據(jù)自己當(dāng)前項(xiàng)目的技術(shù)平臺(tái),到官網(wǎng)上選用合適的實(shí)現(xiàn)庫(kù)即可。

特點(diǎn)

使用JWT來(lái)傳輸數(shù)據(jù),實(shí)際上傳輸?shù)氖且粋€(gè)字符串,這個(gè)字符串就是所謂的json web token字符串。所以廣義上,JWT是一個(gè)標(biāo)準(zhǔn)的名稱;狹義上,JWT指的就是用來(lái)傳遞的那個(gè)token字符串。這個(gè)串有兩個(gè)特點(diǎn):

  • 緊湊:指的是這個(gè)串很小,能通過(guò)url 參數(shù),http 請(qǐng)求提交的數(shù)據(jù)以及http header的方式來(lái)傳遞;
  • 自包含:這個(gè)串可以包含很多信息,比如用戶的id、角色等,別人拿到這個(gè)串,就能拿到這些關(guān)鍵的業(yè)務(wù)信息,從而避免再通過(guò)數(shù)據(jù)庫(kù)查詢等方式才能得到它們。
  • 結(jié)構(gòu)

    它由三部分組成:header(頭部)、payload(載荷)、signature(簽名),以.進(jìn)行分割。(這個(gè)字符串本來(lái)是只有一行的,此處分成3行,只是為了區(qū)分其結(jié)構(gòu))

  • header用來(lái)聲明類型(typ)和算法(alg)。
  • payload一般存放一些不敏感的信息,比如用戶名、權(quán)限、角色等。
  • signature則是將header和payload對(duì)應(yīng)的json結(jié)構(gòu)進(jìn)行base64url編碼之后得到的兩個(gè)串用英文句點(diǎn)號(hào)拼接起來(lái),然后根據(jù)header里面alg指定的簽名算法生成出來(lái)的。
  • 和Session的區(qū)別

    為什么我們要把JWT和Session做對(duì)比呢?因?yàn)槲覀冎饕诿恳淮握?qǐng)求的認(rèn)證時(shí)會(huì)用JWT,在此之前我們都是用Session的。那這兩者的區(qū)別在哪兒呢?

    本身的含義

    看了前面的介紹,我們發(fā)現(xiàn)JWT這個(gè)字符串其實(shí)本身就包含了關(guān)于用戶的信息,比如用戶名、權(quán)限、角色等。

    Session傳遞的sessionId雖然是一個(gè)更簡(jiǎn)單的字符串,但它本身并沒(méi)有任何含義。

    所以一般說(shuō)來(lái)JWT的字符串要比sessionId長(zhǎng),如果你在JWT中存儲(chǔ)的信息越長(zhǎng),那么JWT本身也會(huì)越長(zhǎng)。

    而Cookie的存儲(chǔ)容量是有限制的(通常為4KB),所以大家在使用的時(shí)候需要注意。

    解析方法

    JWT的header和payload其實(shí)是有json轉(zhuǎn)變過(guò)來(lái)的,而signature其實(shí)就是一個(gè)加密后的字符串,因此解析起來(lái)較為簡(jiǎn)單,不需要其他輔助的內(nèi)容。

    sessionId是服務(wù)器存儲(chǔ)的用戶對(duì)象的標(biāo)識(shí),理論上需要一個(gè)額外的map才能找出當(dāng)前用戶的信息。

    管理方法

    JWT理論上用于無(wú)狀態(tài)的請(qǐng)求,因此其用戶管理也只是依賴本身而已。我們一般是在它的payload中加入過(guò)期時(shí)間,在不增加額外管理的情況下,它只有自動(dòng)過(guò)期的方式。

    Session因?yàn)樗揪褪谴鎯?chǔ)在服務(wù)器端的,因此管理方案就有很多,而且大多都很成熟。

    跨平臺(tái)

    JWT本身就是基于json的,因此它是比較容易跨平臺(tái)的,可以從官網(wǎng)下載不同平臺(tái)的包,解析即可。

    session的跨平臺(tái)可能就不那么好做了,需要考慮的地方在于用戶信息存儲(chǔ)的格式,ProtoBuf、json、xml等,管理的話可能就需要專門(mén)的統(tǒng)一登錄平臺(tái),這個(gè)就不展開(kāi)了。

    時(shí)效性

    無(wú)狀態(tài)JWT一旦被生成,就不會(huì)再和服務(wù)端有任何瓜葛。一旦服務(wù)端中的相關(guān)數(shù)據(jù)更新,無(wú)狀態(tài)JWT中存儲(chǔ)的數(shù)據(jù)由于得不到更新,就變成了過(guò)期的數(shù)據(jù)。

    session就不一樣了,sessionId本身就沒(méi)有太多含義,只需修改服務(wù)端中存儲(chǔ)的數(shù)據(jù)即可。

    適用場(chǎng)景

    JWT

    JWT的最佳用途是一次性授權(quán)Token,這種場(chǎng)景下的Token的特性如下:

    • 有效期短
    • 只希望被使用一次

    真實(shí)場(chǎng)景的例子——文件托管服務(wù),由兩部分組成:

    • Web 應(yīng)用:這是一個(gè)可以被用戶登錄并維持狀態(tài)的應(yīng)用,用戶在應(yīng)用中挑選想要下載的文件。
    • 文件下載服務(wù):無(wú)狀態(tài)下載服務(wù),只允許通過(guò)密鑰下載。

    如何把JWT用在這個(gè)場(chǎng)景中呢?

  • 用戶登錄到 Web 應(yīng)用中,挑選好想要下載的文件,點(diǎn)擊下載。
  • 認(rèn)證服務(wù)頒發(fā)包含下載信息的、具有較短過(guò)期時(shí)間的JWT。JWT中包含的信息可以是這樣的:
  • { "file": "/books/我這一輩子.pdf

    總結(jié)

    以上是生活随笔為你收集整理的session传递参数_JWT与Session的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。