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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一篇文章带你分清楚JWT,JWS与JWE

發布時間:2023/12/4 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一篇文章带你分清楚JWT,JWS与JWE 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨著移動互聯網的興起,傳統基于session/cookie的web網站認證方式轉變為了基于OAuth2等開放授權協議的單點登錄模式(SSO),相應的基于服務器session+瀏覽器cookie的Auth手段也發生了轉變,Json Web Token出現成為了當前的熱門的Token Auth機制。

Json Web Token(JWT)

JSON Web Token(JWT)是一個非常輕巧的規范。這個規范允許我們使用JWT在兩個組織之間傳遞安全可靠的信息。

官方定義:JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties

JWT Auth

現在網上大多數介紹JWT的文章實際介紹的都是JWS(JSON Web Signature),也往往導致了人們對于JWT的誤解,但是JWT并不等于JWS,JWS只是JWT的一種實現,除了JWS外,JWE(JSON Web Encryption)也是JWT的一種實現。
下面就來詳細介紹一下JWT與JWE的兩種實現方式:

JWT,JWS與JWE

JSON Web Signature(JWS)

JSON Web Signature是一個有著簡單的統一表達形式的字符串:

JWS

頭部(Header)

頭部用于描述關于該JWT的最基本的信息,例如其類型以及簽名所用的算法等。
JSON內容要經Base64 編碼生成字符串成為Header。

載荷(PayLoad)

payload的五個字段都是由JWT的標準所定義的。

  • iss: 該JWT的簽發者

  • sub: 該JWT所面向的用戶

  • aud: 接收該JWT的一方

  • exp(expires): 什么時候過期,這里是一個Unix時間戳

  • iat(issued at): 在什么時候簽發的

  • 后面的信息可以按需補充。
    JSON內容要經Base64 編碼生成字符串成為PayLoad。

    簽名(signature)

    這個部分header與payload通過header中聲明的加密方式,使用密鑰secret進行加密,生成簽名。
    JWS的主要目的是保證了數據在傳輸過程中不被修改,驗證數據的完整性。但由于僅采用Base64對消息內容編碼,因此不保證數據的不可泄露性。所以不適合用于傳輸敏感數據。

    JSON Web Encryption(JWE)

    相對于JWS,JWE則同時保證了安全性與數據完整性。
    JWE由五部分組成:

    JWE組成

    具體生成步驟為:

  • JOSE含義與JWS頭部相同。

  • 生成一個隨機的Content Encryption Key (CEK)。

  • 使用RSAES-OAEP 加密算法,用公鑰加密CEK,生成JWE Encrypted Key。

  • 生成JWE初始化向量。

  • 使用AES GCM加密算法對明文部分進行加密生成密文Ciphertext,算法會隨之生成一個128位的認證標記Authentication Tag。
    6.對五個部分分別進行base64編碼。

  • 可見,JWE的計算過程相對繁瑣,不夠輕量級,因此適合與數據傳輸而非token認證,但該協議也足夠安全可靠,用簡短字符串描述了傳輸內容,兼顧數據的安全性與完整性。??

    總結

    以上是生活随笔為你收集整理的一篇文章带你分清楚JWT,JWS与JWE的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。