中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JWT的數據結構是什么

發布時間:2022-11-07 10:30:54 來源:億速云 閱讀:182 作者:iii 欄目:開發技術

這篇文章主要介紹“JWT的數據結構是什么”,在日常操作中,相信很多人在JWT的數據結構是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JWT的數據結構是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    概述

    JWT,全名為Json Web Token,是一種自包含令牌。

    簡單的說,就是基于JSON,在web環境下傳輸一個規定格式的字符串令牌。

    廣義上講JWT,這是一個Web安全傳輸信息方式。狹義上來說,直接指傳遞的令牌字符串。

    JWT的數據結構是什么

    應用場景

    首先,我們需要知道,JWT無法用于數據加密。一般是用來身份提供者和服務者之間傳遞被認證的用戶身份信息,以便于從資源服務器獲取到資源。

    也可以增加一些額外的其它業務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密。

    所以,可以推斷出,在以下場景中使用JWT是比較合適的。

    • 授權:這是最常見的使用場景,解決單點登錄問題。因為JWT使用起來輕便,開銷小,服務端不用記錄用戶狀態信息(無狀態),所以使用比較廣泛;

    • 信息交換:JWT是在各個服務之間安全傳輸信息的好方法。因為JWT可以簽名,例如,使用公鑰/私鑰對兒 - 可以確定請求方是合法的。此外,由于使用標頭和有效負載計算簽名,還可以驗證內容是否未被篡改。

    JWT認證過程

    JWT官網有一張圖描述了JWT的認證流程

    JWT的數據結構是什么

    流程說明:

    • 1,瀏覽器發起請求登陸,攜帶用戶名和密碼;

    • 2,服務端驗證身份,根據算法,將用戶標識符打包生成 token,

    • 3,服務器返回JWT信息給瀏覽器,JWT不包含敏感信息;

    • 4,瀏覽器發起請求獲取用戶資料,把剛剛拿到的 token一起發送給服務器;

    • 5,服務器發現數據中有 token,驗明正身;

    • 6,服務器返回該用戶的用戶資料;

    JWT的數據結構

    JWT字符串的格式:

    header.payload.signature

    JWT通常由三部分組成,按照順序: 頭信息(header), 有效載荷(payload)和簽名(signature)。

    header

    header是一串描述JWT元數據的JSON字符串,例如:

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

    HS256 表示使用了 HMAC-SHA256 來生成簽名。

    最后使用Base64URL算法將上述JSON對象轉換為字符串保存。

    其他還有一些簽名算法,可以去官網查看。

    payload

    Payload 部分也是一個 JSON 對象,用來存放實際需要傳遞的數據。JWT 規定了7個官方字段,供選用。

     iss (issuer):簽發人
     exp (expiration time):過期時間(jwt的過期時間,這個過期時間必須要大于簽發時間)
     sub (subject):主題
     aud (audience):受眾
     nbf (Not Before):生效時間(定義在什么時間之前,該jwt都是不可用的.)
     iat (Issued At):簽發時間
     jti (JWT ID):編號(jwt的唯一身份標識,主要用來作為一次性token,從而回避重放攻擊。)

    當然,除了前面的字符串,這里也就是我們傳輸數據的地方。可以自定義字段傳輸。例如:

     {
     "微信公眾號": "程序編程之旅",
     "姓名": "諳憶"
     }

    當然,我這里就是推廣下公眾號,前面的key用了中文名,你別這么玩就行。

    注意哦,這部分的數據默認是不加密的。所以,如果有敏感信息,注意再使用加密算法把數據加密后傳輸即可。

    這個JSON對象傳輸時,也要使用Base64URL算法轉成字符串。

    signature

    簽名哈希部分是對上面兩部分數據簽名,通過指定的算法生成哈希,以確保數據不會被篡改。

    首先,需要指定一個密碼(secret)。該密碼保存在服務器中,并且不能向用戶公開。然后,使用標頭中指定的簽名算法(默認情況下為HMAC SHA256)根據以下公式生成簽名。

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

    token看起來像這樣:

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

    JWT的用法

    客戶端接收服務器返回的JWT,將其存儲在Cookie或localStorage中。

    此后,客戶端將在與服務器交互中都會帶JWT。如果將它存儲在Cookie中,就可以自動發送,但是不會跨域,因此一般是將它放入HTTP請求的Header Authorization字段中。

    當跨域時,也可以將JWT放置于POST請求的數據主體中。

    JWT的優缺點

    1、JWT默認不加密,所以可能導致數據泄露,但可以加密。生成原始令牌后,可以使用該令牌再次對其進行加密。

    2、當JWT未加密時,一些私密數據無法通過JWT傳輸。

    3、JWT不僅可用于認證,還可用于信息交換。善用JWT有助于減少服務器請求數據庫的次數。

    4、JWT的最大缺點是服務器不保存會話狀態,所以在使用期間不可能取消令牌或更改令牌的權限。也就是說,一旦JWT簽發,在有效期內將會一直有效。

    5、JWT本身包含認證信息,因此一旦信息泄露,任何人都可以獲得令牌的所有權限。為了減少盜用,JWT的有效期不宜設置太長。對于某些重要操作,用戶在使用時應該每次都進行身份驗證。

    6、為了減少盜用和竊取,JWT不建議使用HTTP協議來傳輸代碼,而是使用加密的HTTPS協議進行傳輸,防止服務器返回給用戶的JWT被攔截。

    看著上面6點,我的建議是,無論有沒有敏感數據,對于用戶認證信息數據做一層加密。最大程度上避免數據泄露造成問題。

    最后,強調一點:JWT不是用來加密的,只是用來驗證用戶的真實性以及請求來源的真實性。

    到此,關于“JWT的數據結構是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    jwt
    AI

    汝阳县| 尼玛县| 穆棱市| 彩票| 泸州市| 拜城县| 泸水县| 佛冈县| 吉林市| 合山市| 广河县| 林甸县| 凤冈县| 循化| 定西市| 杭锦旗| 巧家县| 白沙| 丰台区| 霍林郭勒市| 晋城| 呼和浩特市| 开原市| 东阳市| 大港区| 达州市| 阳信县| 阿城市| 大方县| 巴林左旗| 泽库县| 定陶县| 绍兴县| 永昌县| 北海市| 阿拉善盟| 青神县| 大连市| 哈尔滨市| 东莞市| 于田县|