JWT:你好了解一下 只要兩分鐘!

2021-01-13 小碼農談IT

小馬經常看到招聘要求中會寫著一個詞:JWT。沒接觸過的同學可能一愣,這是啥高級玩意?看起來很唬人的樣子,不能查,一查就是個token生成方式。好,那就來了解一下吧。

什麼是JWT

JSON Web Token (JWT)是一個開放標準(RFC 7519),它定義了一種緊湊的、自包含的方式,該token被設計為緊湊且安全的,特別適用於分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便於從資源伺服器獲取資源,也可以增加一些額外的其它業務邏輯所必須的聲明信息,該token也可直接被用於認證,也可被加密。

啥意思呢?就是說我是一種token生成方式/標準,可以用於身份認證也可以用於傳遞數據,並且我是可加密的。也就是要生產token的話,小馬要是自己想規定一個token生成方式就不按JWT標準,也是沒問題的。

為什麼會有JWT這玩意呢

我們應該先來談一談傳統的session認證和基於token的認證。

1、傳統的session認證

因為HTTP協議本身是無狀態的,而在本次會話過程中我們的每一次請求都需要進行用戶身份認證的保持,於是將第一次請求服務端校驗後的用戶身份標誌(session_id)保存在客戶端(cookie)便於下次請求時帶上身份,這樣服務端就能識別身份了。借用一個圖片來理解。

這種

這種方式的弊端在於,因為是基於cookie來進行用戶識別的, cookie如果被截獲,用戶就會很容易受到跨站請求偽造(CSRF)的攻擊。由於依賴於cookie和session不利於作單點登錄(session共享和跨域CORS)和沒有cookie機制的(APP)的實現。

埋一個彩蛋:如果禁用了cookie,session機制還可以用嗎?可以,把session_id放請求參數裡。session的存儲方式有哪些?默認存文件,還可以存DB和cache。如果就是要基於session實現單點登錄呢,即一處登錄其他系統都能用?同域下,將session存儲共享即可。

2、基於token的鑑權

基於token機制不需要知道用戶在哪臺機器登陸,服務端只認token標誌。可以支持CORS跨域,不過服務端要同時支持,一般設置Access-Control-Allow-Origin: *。借JWT的一張圖來助於理解。JWT其實就是token機制的一種實現,下面再講。

3、JWT原理

我們上面盤了一下得到,JWT其實就是個token生成方式。那它是怎麼個生法呢?

JWT是由三段信息構成的,分別是Header,Payload,Signature,將這三段信息文本用點連結一起就構成了JWT字符串。看起來是這個樣子:aaa.bbb.ccc。

Header典型的由兩部分組成:token的類型(「JWT」)和算法名稱(比如:HMAC SHA256或者RSA等等)。例如{'alg':"HS256",'typ':"JWT"},用Base64對這個JSON加密(是對稱加密)就得到JWT的第一部分。

Payload載荷就是存放有效信息的地方(可以理解為皮卡的後備箱)。有效信息包含三個部分:標準中註冊的聲明(這裡有一組預定義的聲明,它們不是強制的,但是推薦。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等),公共的聲明(可以隨意定義任何信息),私有的聲明(是提供者和消費者所共同定義的聲明,用於在同意使用它們的各方之間共享信息)。這三部分信息都不建議放敏感信息,因為是base64對稱加密的,除非信息本身已經有做過一層加密處理。第二段信息格式例子如下:{"sub":'123456789',"name":'xiaoma',"level":'1'},同樣進行Base64編碼就得到JWT的第二部分。

Signature籤名(可以理解為駕照),對編碼過的Header、編碼過的Payload、一個密鑰(私鑰),籤名算法用是Header中指定的那個,然對它們籤名得到的就是JWT的三部分。類似Signature=HS256(base64(Header)+base64(Payload),secret)。私鑰可以防止篡改和驗證有效性。

實踐演練

好了,我們得到了一個JWT方式的token。那這個token放哪裡呢? query參數嗎?最好把JWT放在HTTP請求的Header Authorization,格式是Authorization: Bearer jwtStr。類似如下:

設置Header Authorization
查看結果請求頭
服務端獲取到請求頭JWT數據

後記

筆者認為,JWT也就是個token生成方式和普通token本質沒啥區別。要是JWT串被截取和普通token一樣同樣逃不掉權限被劫持,最好用HTTPS加密請求。為了安全,服務端對於敏感權限需要重新驗證,令牌要設置合理的過期時間。

JWT不僅僅可以實現身份認證還可以在跨域post請求時將請求參數加入到有效載荷中,實現post跨域請求。

本文主要助於理解,水平有限,不到之處歡迎指正。

相關焦點

  • JWT 使用 nimbus-jose-jwt 進行解碼
    常用的可以使用 OAuth0 提供的解碼包,你也可能會使用 nimbus-jose-jwt 包。Maven 配置參數為:<dependency><groupId>com.nimbusds</groupId><artifactId>nimbus-jose-jwt</artifactId><version>9.0.1</version>
  • 入門|egg.js 入門之egg-jwt
    小小繼續學習,這次學習的內容是egg-jwt 相關。創建egg項目這裡創建一個egg新項目,這裡使用的是ts模式。'egg';const plugin: EggPlugin = { jwt: { enable: true, package: "egg-jwt" }, cors: { enable: true, package: 'egg-cors', }};export default plugin;配置默認配置文件config.jwt = { secret:
  • SpringSecurity + JWT前後端分離架構實現
    如何實現無狀態登錄的流程:首先客戶端發送帳戶名/密碼到服務端進行認證認證通過後,服務端將用戶信息加密並且編碼成一個token,返回給客戶端以後客戶端每次發送請求,都需要攜帶認證的token服務端對客戶端發送來的token進行解密,判斷是否有效,並且獲取用戶登錄信息在前後端分離的項目中,登錄策略也有不少,不過JWT算是目前比較流行的一種解決方案了,本文就和大家來分享一下如何將
  • (建議收藏)|Spring Boot集成JSON Web Token(JWT)
    一:認證在了解JWT之前先來回顧一下傳統session認證和基於token認證。## 1.1 傳統session認證http協議是一種無狀態協議,即瀏覽器發送請求到伺服器,伺服器是不知道這個請求是哪個用戶發來的。為了讓伺服器知道請求是哪個用戶發來的,需要讓用戶提供用戶名和密碼來進行認證。
  • 利用jwt 可以獲取用戶的額外信息?
    涉及的小問題有以下三個:如何在返回的 jwt 中添加自定義數據;如何在 jwt 中添加用戶的額外數據,比如用戶 id、手機號碼;如何在資源伺服器中取出這些自定義數據。下面我們分別來看如何實現。如何在返回的 jwt 中添加自定義數據這個問題比較簡單,只要按照如下兩步即可:1.
  • SpringSecurity代碼實現JWT接口權限授予與校驗
    通過筆者前兩篇文章的說明,相信大家已經知道JWT是什麼,怎麼用,該如何結合Spring Security使用。那麼本節就用代碼來具體的實現一下JWT登錄認證及鑑權的流程。為了大部分的移動端用戶觀看,本文所有代碼均用圖片的形式發布,圖片點擊可放大。
  • Spring Security OAuth2.0認證授權五:用戶信息擴展到jwt
    OAuth2.0認證授權二:搭建資源服務 Spring Security OAuth2.0認證授權三:使用JWT令牌 Spring Security OAuth2.0認證授權四:分布式系統認證授權上一篇文章講解了如何在分布式系統環境下進行認證和鑑權,總體來說就是網關認證,目標服務鑑權,但是存在著一個問題:關於用戶信息,目標服務只能獲取到網關轉發過來的username信息,為啥呢,因為認證服務頒發jwt
  • 你好,PTSD,請了解一下!
    本文作者:李嘯天喔,陳奕迅,遊泳健身了解一下!喔,周杰倫,遊泳健身了解一下!哦,錯了,是PTSD了解一下!回攏一下,回到戰後心理綜合證上去。戰爭對人的折磨與摧殘,其實影史上早有過非常多的影片了。經典如《現代啟示錄》《細細的紅線》《第一滴血》等片,都有非常形象的刻畫。近兩年也有《比利林恩的中場休息》《美國狙擊手》等片進行過刻畫。
  • 從肺到大腦只要7秒?菸癮兩小時一次?醫生:你了解尼古丁嗎?
    您好,看完這篇文章你可能需要三分鐘,但是您會知道: 一、為什麼一口接一口的吸菸會讓人感覺更加興奮? 二、為什麼菸癮兩小時一次? 三、為什麼吸菸的人一根一根抽也不會猝死呢?
  • 兩分鐘幫你了解棒球比賽怎麼欣賞
    但由於棒球在中國的發展尚處於初期階段,很多朋友在剛開始觀看比賽的時候會覺得有些迷茫,不知道球賽的基本規則和常識性的問題,所以在這裡小編帶您了解一下如何能夠看懂一場棒球比賽。快速解讀棒球是一種團體性體育運動,比賽人數最少為9人。棒球球員分為攻、守兩方,在一個鑽石形的棒球場裡進行比賽。比賽中,兩隊交替進攻,當進攻球員成功跑回本壘,就可得1分。9局比賽分數累計領先者為勝隊。
  • 人稱「快速香蕉」,播種到果實成熟只要50天,一起了解一下
    摘要:人稱「快速香蕉」,播種到果實成熟只要50天,一起了解一下。也許是生活壓力帶來的影響吧,不知道大家有沒有發現這樣一個問題,不論做任何事情,我們都希望能夠快速一點,時間很寶貴,這也快,那也快,不知不覺中將我們帶入了一個快節奏的生活裡。
  • 10月你好的說說 秋風捲走熾熱的暑氣,十月伴著涼風灑脫走來
    不管怎麼樣,我們都將告別2020年9月,迎來2020年10月,很多人在10月第一天都會發朋友圈紀念一下,尤其是很多人都會發10月你好的說說,那麼接下來   原標題:10月你好的說說 秋風捲走熾熱的暑氣,十月伴著涼風灑脫走來     馬上就要到2020年10月份了
  • 【英語每日一課】你好,蝴蝶《Hello, Butterfly》
    你好,大蝴蝶。Hello, small butterfly.你好,小蝴蝶。Hello, red butterfly.你好,紅色的蝴蝶。Hello, green butterfly.你好,綠色的蝴蝶。Hello, striped butterfly.你好,條紋蝴蝶。
  • 你好鴨榮獲鴨脖十大品牌榮譽
    榮登「2017年度中國鴨脖十大品牌」榜單的優秀企業和品牌如下:其中著重介紹一下江蘇五香居食品有限公司 (你好鴨)。而更令人意外的是,大白天的車間裡竟然一點動靜都沒有,經過諮詢了解才明白,為了第二天就讓食客吃到最新鮮的鴨貨,廠區只在夜間開工。
  • 湖南上線分鐘級降水預報!精準定位到街道 了解一下!
    記者從湖南省氣象臺了解,現在通過湖南氣象網和"湖南天氣"微信公眾號都能實時查看雷達圖,但一張五顏六色的雷達圖究竟怎麼看?如何判斷哪裡在下雨、哪裡降雨最大、雨什麼時候才停?湖南省氣象服務中心專業氣象臺臺長廖春花向記者介紹了手機查詢雷達圖的使用方法。
  • 兩分鐘入睡法了解一下丨How to fall asleep in 120 seconds
    美國海軍飛行預科學校開發了一種科學方法,可以讓飛行員在兩分鐘內,在任何時間、地點和情況下入睡。After six weeks of practice, 96 percent of pilots could fall asleep in two minutes or less.
  • 12月你好的正能量祝福句子2020 十二月你好的說說文案最新
    12月你好的正能量祝福句子、說說文案(二)  9.十二月你好!不憶過往,不念未來,只想你陪我到海角天涯,地老天荒。  10.十二月你好!也許我是個壞人,不過只要你的輕輕一吻,我就變成了一個好人。  11.十二月你好!我心裡一直有個vip貴賓室,只等你來。
  • 十二月你好唯美文案
    十二月你好。 2、十二月你好,好的壞的都是一種成長,愛笑的女孩運氣都不會太差。 3、十二月,請對我好一些,希望這個月歡樂多一些,無論酸甜苦辣,不好的都會過去,好的都留在我身邊。 4、十二月你好,別把難過掛在臉上,因為會顯得很沒出息。
  • BBC《人類星球》紀錄片擺拍了解一下 你被騙了好多年
    而且BBC在當年的紀錄片中放了10分鐘的花絮專門解釋了這一前因後果。它下次所要做的,可能是在片中更為清楚地將實拍和擺拍的部分交代給觀眾。 原標題:BBC「造假」騙了你好多年?
  • 告別11月迎接12月的句子_十二月你好唯美朋友圈說說早安語錄
    關於告別11月迎接12月的句子_十二月你好唯美朋友圈說說早安語錄這個話題,相信很多小夥伴都非常有興趣了解,因為這個話題也是近期網絡上非常火熱的,那麼既然大家都想知道告別11月迎接12月的句子_十二月你好唯美朋友圈說說早安語錄,華圖教育廣東公務員考試網小編便從網上搜集了一些與11月再見12月你好相關的信息,下面分享給大家一起了解一下吧