<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是JWT?JWT由哪些部分組成?JWT如何進行用戶認證?

jf_uPRfTJDa ? 來源:移動Labs ? 2024-02-25 09:44 ? 次閱讀

Part 01

JWT是什么?

JWT(JSON Web Token)是一個開放的行業標準(RFC 7519),自身包含了身份驗證所需要的所有信息,因此我們的服務器不需要存儲用戶Session信息。這顯然增加了系統的可用性和伸縮性,大大減輕了服務端的壓力??梢钥闯鯦WT更符合設計RESTful API時的Stateless(無狀態)原則。并且使用JWT認證可以有效避免CSRF攻擊,因為JWT一般是存在在localStorage中,使用JWT進行身份驗證的過程中是不會涉及到Cookie的。

Part 02

JWT由哪些部分組成?

e8d79734-d300-11ee-a297-92fbcf53809c.png

JWT本質上是一組字串,通常是這樣的:xxxxx.yyyyy.zzzzz,通過(.)切分成三個為Base64編碼的部分:

Header:描述JWT的元數據,定義了生成簽名的算法以及Token的類型。

Payload:用來存放實際需要傳遞的數據。

Signature:服務器通過Payload、Header和一個密鑰(Secret)

使用Header里面指定的簽名算法(默認是 HMAC SHA256)生成。

示例:

e8eba49a-d300-11ee-a297-92fbcf53809c.png

可以通過https://jwt.io對上述JWT進行解碼,解碼之后便可得到Header、Payload、Signature這三部分。Header和Payload都是JSON格式的數據,Signature由Payload、Header和Secret(密鑰)通過特定的計算公式和加密算法得到。

e8ff6f7a-d300-11ee-a297-92fbcf53809c.png

Header

通常由兩部分組成。

typ(Type):令牌類型,也就是JWT

alg(Algorithm):簽名算法,比如HS256

示例:

e93eb630-d300-11ee-a297-92fbcf53809c.png

JSON形式的Header被轉換成Base64編碼,成為JWT的第一部。

Payload

包含了三種類型的聲明。

Registered Claims(注冊聲明):預定義的一些聲明,建議使用,但不強制。

Public Claims(公有聲明):JWT簽發方可以自定義的聲明。

Private Claims(私有聲明):JWT簽發方因為項目需要而自定義的聲明。

下面是一些常見的注冊聲明:

iss(issuer):JWT 簽發方。

iat(issued at time):JWT簽發時間。

sub(subject):JWT主題。

aud(audience):JWT接收方。

exp(expiration time):JWT的過期時間。

nbf(not before time):JWT生效時間,早于該定義的時間的JWT不能被接受處理。

jti(JWT ID):JWT唯一標識。

示例:

e955c4ce-d300-11ee-a297-92fbcf53809c.png

Payload部分默認是不加密的,一定不要將隱私信息存放在 Payload 當中?。?!

JSON 形式的Payload被轉換成Base64編碼,成為JWT的第二部分。

Signature

對前兩部分的簽名,作用是防止JWT(主要是payload)被篡改。簽名的生成需要用到:Header+Payload、存放在服務端的密鑰(一定不要泄露出去)、簽名算法。簽名的計算公式如下:

e966ddae-d300-11ee-a297-92fbcf53809c.png

算出簽名以后,把 Header、Payload、Signature三個部分拼成一個字符串,每個部分之間用"點"(.)分隔,這個字符串就是JWT。

Part 03

JWT如何進行用戶認證?

在基于JWT進行身份驗證的的應用程序中,服務器通過 Payload、Header和Secret(密鑰)創建JWT并將JWT發送給客戶端??蛻舳私邮盏絁WT之后,會將其保存在Cookie或者localStorage里面,以后客戶端發出的所有請求都會攜帶這個令牌。

e995c51a-d300-11ee-a297-92fbcf53809c.png

簡化后的步驟如下:

1.用戶向服務器發送用戶名、密碼以及驗證碼用于登陸系統。

2.如果用戶用戶名、密碼以及驗證碼校驗正確的話,服務端會返回已簽名的Token,也就是JWT。

3.用戶以后每次向后端發請求都在Header中帶上這個JWT。

4.服務端檢查JWT并從中獲取用戶相關信息。

兩點建議:

1.建議將JWT存放在localStorage中,放在Cookie中會有CSRF風險。

2.請求服務端并攜帶JWT的常見做法是將其放在HTTP Header的Authorization字段中(Authorization:Bearer Token)

Part 04

JWT如何防止被篡改?

服務器返回簽名之后,即使JWT被泄露或者截獲,黑客也沒辦法同時篡改Signature、Header、Payload。

這是為什么呢?因為服務端拿到JWT之后,會解析出其中包含的Header、Payload 以及Signature。服務端會根據Header、Payload、密鑰再次生成一個Signature。拿新生成的Signature和JWT中的Signature作對比,如果一樣就說明Header和Payload沒有被修改。

不過,如果服務端的秘鑰也被泄露的話,黑客就可以同時篡改Signature、Header、Payload了。黑客直接修改了Header和Payload之后,再重新生成一個Signature就可以了。

?注意:密鑰一定保管好,一定不要泄露出去。JWT安全的核心在于簽名,簽名安全的核心在密鑰。

Part 05

JWT如何加強安全性?

1.使用安全系數高的加密算法。

2.使用成熟的開源庫,沒必要造輪子。

3.JWT存放在localStorage中而不是Cookie中,避免CSRF風險。

4.一定不要將隱私信息存放在Payload當中。

5.密鑰一定保管好,一定不要泄露出去。JWT安全的核心在于簽名,簽名安全的核心在密鑰。

6.Payload要加入exp(JWT的過期時間),永久有效的JWT不合理。并且JWT的過期時間不易過長。

Part 06

JWT有哪些優缺點?

- 優點

1.無狀態:自身攜帶用戶信息,不需要在服務器上保存session信息。

2.可有效避免CSRF攻擊:CSRF攻擊需要依賴Cookie,然而JWT選擇存放在localStorage中,因此非法鏈接無法獲取JWT。

- 缺點

1.不可控:就比如說,我們想要在JWT有效期內廢棄一個JWT或者更改它的權限的話,并不會立即生效,通常需要等到有效期過后才可以。再比如說,當用戶Logout的話,JWT也還有效。

Part 07

JWT使用總結

在“約定優于配置,配置優于編碼”的開發理念下,通過Apollo配置中心,程序員不需要每次更改線上配置都要重新發布服務,成功實現了將配置與編碼解耦,為線上服務變更配置提供了解決方案。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • HTTP
    +關注

    關注

    0

    文章

    467

    瀏覽量

    30394
  • 密鑰
    +關注

    關注

    1

    文章

    119

    瀏覽量

    19603
  • JSON
    +關注

    關注

    0

    文章

    112

    瀏覽量

    6840

原文標題:技術 | 什么是JWT?一文讀懂

文章出處:【微信號:5G通信,微信公眾號:5G通信】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    jw和e^jwt的一些理解

    轉昨晚看到《電磁場與電磁波》時變電磁場一章,書中又一次出現了jw和e^jwt,之前一直無法理解諸如為什么電感的阻抗可以表示成jwL之類的問題,jw是從哪里推導出來的呢?為什么可以直接與L相乘呢?
    發表于 05-23 07:39

    開發人員和嵌入式系統設計人員如何使用JWT關閉物聯網設備的安全漏洞?

    本文將介紹物聯網設備安全威脅,并介紹目前用于應對該威脅的設備。它將確定安全漏洞以及開發人員和嵌入式系統設計人員如何使用JWT關閉它們。
    發表于 06-16 06:17

    SpringBoot 學習筆記

    SpringBoot 學習筆記 【整合JWT】添加依賴創建工具類登錄獲取jwt使用jwtDemo源碼參考資料添加依賴pom.xml...com.auth0java-jwt3.12.0
    發表于 07-01 07:27

    CT107開發板是哪些部分組成的?

    CT107開發板是哪些部分組成的?74HC138和74HC573是如何使用的?DS1302和DS18B20是如何進行接線的?
    發表于 07-26 07:43

    Json Web Token是什么?有哪些應用呢

    和payload編碼和拼接后經過加密算法加密,加密時還要一個密碼,這個密碼保存在服務器端。大致示意圖如下:Header:head部分組成,一個是token類型,一個是使用的算法,如下類型為jwt
    發表于 10-18 14:34

    JWT-II智能測量系統使用說明書

    JWT-II智能測量系統使用說明書
    發表于 07-31 17:07 ?3次下載

    如何才能保證JWT安全

    jwt是什么? JWTs是JSON對象的編碼表示。JSON對象由零或多個名稱/值對組成,其中名稱為字符串,值為任意JSON值。JWT有助于在clear(例如在URL中)發送這樣的信息,可以被信任
    的頭像 發表于 09-29 15:09 ?3071次閱讀

    MicroProfile JWT Auth MicroProfile的JWT RBAC規范

    microprofile-jwt-auth.zip
    發表于 05-07 10:04 ?0次下載
    MicroProfile <b class='flag-5'>JWT</b> Auth MicroProfile的<b class='flag-5'>JWT</b> RBAC規范

    jwt-auth基于ThinkPHP的jwt框架

    ./oschina_soft/gitee-jwt-auth.zip
    發表于 06-30 09:10 ?1次下載
    <b class='flag-5'>jwt</b>-auth基于ThinkPHP的<b class='flag-5'>jwt</b>框架

    為何JWT不適合存儲Session

    很多人錯誤地嘗試比較 Cookies 和 JWT。這種對比毫無意義,就像對比內存和硬盤一樣。Cookies 是一種存儲機制,然而 JWT Tokens 是被加密并簽名后的令牌。
    的頭像 發表于 11-28 10:23 ?447次閱讀

    JJWT是什么?如何保證 JWT 安全

    JJWT是一個提供端到端的JWT創建和驗證的Java庫。永遠免費和開源(Apache License,版本2.0),JJWT很容易使用和理解。它被設計成一個以建筑為中心的流暢界面,隱藏了它的大部分復雜性。
    發表于 03-03 15:12 ?711次閱讀

    jwt冒泡排序的原理

    jwt簡介 冒泡排序: (Bubble Sort)是一種簡單的交換排序。之所以叫做冒泡排序,因為我們可以把每個元素當成一個小氣泡,根據氣泡大小,一步一步移動到隊伍的一端,最后形成一定對的順序。 冒泡
    的頭像 發表于 09-25 16:33 ?346次閱讀
    <b class='flag-5'>jwt</b>冒泡排序的原理

    JWT認證流程

    間傳遞被認證用戶身份信息,以便于從資源服務器獲取資源。 基于token的鑒權機制 基于token的鑒權機制類似于http協議也是無狀態的,它不需要在服務端去保留用戶認證信息或者會話
    的頭像 發表于 10-08 15:01 ?757次閱讀
    <b class='flag-5'>JWT</b>的<b class='flag-5'>認證</b>流程

    后端JWT接口認證的操作流程

    流程 2. JWT 介紹 JWT 全稱為 JSON Web Token,是目前主流的跨域認證解決方案 數據結構由 3 部分組成,中間由「 **. ** 」分割開 它們分別是: Head
    的頭像 發表于 10-31 11:20 ?356次閱讀

    JWT滲透姿勢一篇通

    Signature是使用指定算法對Header和Payload進行簽名生成的,用于驗證JWT的完整性和真實性,Signature的生成方式通常是將Header和Payload連接起來然后使用指定算法對其進行簽名
    的頭像 發表于 11-13 16:04 ?711次閱讀
    <b class='flag-5'>JWT</b>滲透姿勢一篇通
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>