最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談node使用jwt生成的token應(yīng)該存在哪里

 更新時間:2021年06月27日 09:47:44   作者:CharTen  
早上逛某乎的時候,遇到一位同學(xué)在問這個問題,很好奇jwt的存儲位置。本文詳細(xì)的介紹一下,感興趣的可以了解一下

答:通常存儲在客戶端里。

jwt 即 JSON Web Token,是一種認(rèn)證協(xié)議,一般用來校驗(yàn)請求的身份信息和身份權(quán)限。

早上逛某乎的時候,遇到一位同學(xué)在問這個問題,很好奇jwt的存儲位置。剛好前段時間在學(xué)習(xí)此內(nèi)容,不請自邀,厚顏強(qiáng)答。
最開始我也很好奇這個token怎么保存,還差點(diǎn)想搞個redis存儲這個token。

后來查閱資料才知道,原來這個token,服務(wù)端是可以不保存的。只需要客戶端保存好就行,無論什么保持方式,甚至你讓用戶寫紙條揣兜里都可以!

那這個token是怎么工作的呢?

先來說說需要服務(wù)端存儲的操作,即傳統(tǒng)的session會話的做法。

首先要做用戶登陸,先要在服務(wù)端維護(hù)一個登陸表,這個登陸表可以放在緩存里,也可以放進(jìn)數(shù)據(jù)庫里。
當(dāng)用戶登陸的時候,把用戶信息寫入這個登陸表,然后導(dǎo)出一個登陸id,也就是所謂的session,把這個session返回給客戶的,讓客戶端下次請求把這個信息帶上來。

對于前端的小伙伴來說,這個過程通常無感知,后端的老哥們使用一個叫set-cookie的http頭字段,自己把數(shù)據(jù)寫入瀏覽器cookie里了。然后請求的時候,瀏覽器又會自己把cookie寫進(jìn)請求頭里面。

當(dāng)客戶端請求進(jìn)入服務(wù)端時,服務(wù)端拿到cookie里面的session,然后到登陸表里面去查用戶信息,校驗(yàn)用戶權(quán)限,然后即可完成正常的業(yè)務(wù)交互。

誒,那現(xiàn)在我因?yàn)楦鞣N亂七八糟的原因,不想維護(hù)一個登錄表了,想想要怎么搞?
簡單呀,直接把用戶信息發(fā)給客戶端,讓客戶端每次把用戶信息都帶過來,這樣請求一進(jìn)來,連表都不用查,直接就知道是哪個用戶在請求。

但是這樣子,用戶的信息都曝光了,那些中間人呀,最喜歡這種耿直請求了,他們直接拿個凳子坐在你服務(wù)器端口,坐個幾天,你數(shù)據(jù)庫里的全家老表就被別人扒個清清楚楚。

這樣肯定不行,那怎么辦?

加個密再混個淆唄,這樣老哥們拿到你的token,一時半會也一臉懵逼,大概率會大大咧咧地走了,只留下少部分有備(KPI)而來的老哥在苦苦尋求破解。

而你在服務(wù)端一解密,你就拿到用戶信息了,同樣的,你把過期時間也寫進(jìn)密文里面,遇到過期就401跳登錄頁。這樣,一個不需要后端存儲登錄憑證的方案就出爐咯。

這就是jwt最基本的工作原理:就是把身份信息交給客戶端保管。

jwt生成的token由header、payload、signature三部分組成,這三個部分用小數(shù)點(diǎn)“.”分隔開。

header,也就是頭部信息,是描述這個token基本信息,是一個json格式:

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

alg代表的是后面signature簽名部分的生成加密算法,typ表示該token是jwt類型。

payload,就是你的那些用戶數(shù)據(jù)啦,也是一個json格式。不過jwt不建議將敏感數(shù)據(jù)放進(jìn)里面,因?yàn)橐?guī)范里,payload和header一樣,僅僅只是做一次base64編碼后顯示在token上。

signature,是這個token的簽名,通常情況下是將前面的header和payload加上一個你自己定義的私鑰字符串一起加密生成的字符串。

因?yàn)榍懊嬲f了,jwt僅僅是將payload的內(nèi)容做一次base64編碼,所以那些攻擊者老哥要改你的內(nèi)容還是很簡單的,但是老哥們不知道你的私鑰啊,改了之后沒法生成正確的簽名,用加密的方式再次對請求進(jìn)來的header.payload進(jìn)行校驗(yàn),發(fā)現(xiàn)跟signature對不上,這時候你就可以很清楚知道,有人在搞事情,直接返回個500假裝服務(wù)器掛了。
如果想更安全,建議全程使用https協(xié)議進(jìn)行請求通信。

當(dāng)然,你已經(jīng)了解了這個工作原理,自己搞一套惡心人的規(guī)范,也不是不行,比如,把payload再加一次密然后gzip下等等。

那,采用jwt的好處都有啥?

第一點(diǎn),自然是服務(wù)端不需要維護(hù)一個登陸表了,節(jié)省空間,特別是用戶多的情況。
第二點(diǎn),拓展簡單,前提是你不搞事情,老老實(shí)實(shí)遵守采用json格式去表述你的內(nèi)容。
第三點(diǎn),無狀態(tài),只要服務(wù)端支持解析,就可以開展業(yè)務(wù),不需要專門搞個機(jī)制去共享session,方便加機(jī)子。
第四點(diǎn),支持各種各樣的客戶端,不支持cookie也能玩。
壞處嘛,自然就是每次請求都要把這些數(shù)據(jù)帶來帶去的,肯定是增加了請求內(nèi)容的。而且,每次請求進(jìn)來你都要去校驗(yàn),去拿header和paylaod加一次密與signature校驗(yàn),也會增加請求的處理時間。這個與傳統(tǒng)操作相比,其實(shí)是一個時間與空間之間的權(quán)衡問題,最后,還是看你選擇咯。

到此這篇關(guān)于淺談node使用jwt生成的token應(yīng)該存在哪里的文章就介紹到這了,更多相關(guān)jwt生成的token存哪里內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 詳解Node.js異步處理的各種寫法

    詳解Node.js異步處理的各種寫法

    這篇文章主要介紹了Node.js異步處理的各種寫法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • 2023年全網(wǎng)最新Node.js下載安裝教程

    2023年全網(wǎng)最新Node.js下載安裝教程

    這篇文章主要介紹了2023年全網(wǎng)最新Node.js下載安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • node.js使用mongoose操作數(shù)據(jù)庫實(shí)現(xiàn)購物車的增、刪、改、查功能示例

    node.js使用mongoose操作數(shù)據(jù)庫實(shí)現(xiàn)購物車的增、刪、改、查功能示例

    這篇文章主要介紹了node.js使用mongoose操作數(shù)據(jù)庫實(shí)現(xiàn)購物車的增、刪、改、查功能,結(jié)合實(shí)例形式詳細(xì)分析了node.js使用mongoose框架操作MongoDB數(shù)據(jù)實(shí)現(xiàn)購物車增刪改查相關(guān)技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • nodejs初始化init的示例代碼

    nodejs初始化init的示例代碼

    今天小編就為大家分享一篇nodejs初始化init的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • connect中間件session、cookie的使用方法分享

    connect中間件session、cookie的使用方法分享

    今天大象哥用了下connect的session和cookie,感覺還挺好用的,分享一下(里面坑挺多的,文檔寫的太模糊了,費(fèi)了哥不少時間)。
    2014-06-06
  • node實(shí)現(xiàn)批量上傳本地圖片轉(zhuǎn)為圖片CDN的項(xiàng)目實(shí)踐

    node實(shí)現(xiàn)批量上傳本地圖片轉(zhuǎn)為圖片CDN的項(xiàng)目實(shí)踐

    本文主要介紹了node實(shí)現(xiàn)批量上傳本地圖片轉(zhuǎn)為圖片CDN的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 基于 Node.js 實(shí)現(xiàn)前后端分離

    基于 Node.js 實(shí)現(xiàn)前后端分離

    為了解決傳統(tǒng)Web開發(fā)模式帶來的各種問題,我們進(jìn)行了許多嘗試,但由于前/后端的物理鴻溝,嘗試的方案都大同小異。痛定思痛,今天我們重新思考了“前后端”的定義,引入前端同學(xué)都熟悉的NodeJS,試圖探索一條全新的前后端分離模式。
    2016-04-04
  • 詳解Node.js串行化流程控制

    詳解Node.js串行化流程控制

    這篇文章主要介紹了詳解Node.js串行化流程控制 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • node使用async_hooks模塊進(jìn)行請求追蹤

    node使用async_hooks模塊進(jìn)行請求追蹤

    這篇文章主要介紹了node使用async_hooks模塊進(jìn)行請求追蹤,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 使用GruntJS構(gòu)建Web程序之Tasks(任務(wù))篇

    使用GruntJS構(gòu)建Web程序之Tasks(任務(wù))篇

    任務(wù)(Tasks)是grunt的核心概念,你所做的很多工作比如資源合并(concat)、壓縮(uglify)都是在配置任務(wù)。 每次grunt運(yùn)行的時候,你指定的一個或多個任務(wù)也在運(yùn)行,如果你沒有指定任務(wù),那么一個默認(rèn)名為“default”的任務(wù)將自動運(yùn)行。
    2014-06-06

最新評論

垣曲县| 古蔺县| 门头沟区| 西乡县| 南投县| 西乡县| 烟台市| 郴州市| 柞水县| 阜新| 康定县| 崇义县| 阳新县| 元谋县| 班玛县| 凤冈县| 黑山县| 金湖县| 出国| 彰化县| 石河子市| 抚远县| 峨山| 皋兰县| 临沧市| 江口县| 桂东县| 元氏县| 华阴市| 宜章县| 房山区| 年辖:市辖区| 龙江县| 陇南市| 应用必备| 和平县| 林芝县| 满城县| 莲花县| 新邵县| 犍为县|