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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSON Web Token (JWT),服务端信息传输安全解决方案

發布時間:2023/12/3 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSON Web Token (JWT),服务端信息传输安全解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?JSON Web Token (JWT),服務端信息傳輸安全解決方案

JWT介紹

JSON Web Token(JWT)是一種開放標準(RFC 7519),它定義了一種緊湊獨立的基于JSON對象在各方之間安全地傳輸信息的方式。這些信息可以被驗證和信任,因為它是數字簽名的。JWTs可以使用一個密鑰(HMAC算法),或使用RSA的公鑰/私鑰密鑰對對信息進行簽名。

讓我們進一步解釋這個定義的一些概念。

  • 緊湊

由于其較小的體積,JWTs可以通過URL、POST參數或HTTP頭部參數進行傳遞,體積小也意味著其傳輸速度會相當快。

  • 獨立

有效負載包含了所需要的關于用戶的所有信息,避免了多次查詢數據庫的需要。

JWT的應用場景

  • 認證

這是使用JWT最常見的場景,一旦用戶登錄后,每個后續的請求都會包含JWT token,允許用戶訪問該token所允許的路由、服務、資源等。如單點登錄是目前廣泛使用JWT的一項功能,因為它的開銷很小,而且在不同的域名中很容易使用。

  • 信息交換

JWT是一種在多方之間傳遞數據比較好的方式,因為JWT能使用簽名,能確保發送者是誰,也可以驗證傳遞過來的的信息是否被篡改。

JWT的結構

JWT由以下三部分組成:

  • Header(頭部)

  • Payload(載荷)

  • Signature(簽名)

  • 因此,JWT通常看起來如下。

    xxxxx.yyyyy.zzzzz

    Header

    header通常由兩個部分組成:token類型(即JWT)和正在使用的散列算法,如HMAC SHA256或RSA。

    如:

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

    這個JSON經過Base64編碼后形成JWT的第一部分。

    Payload

    載荷包含了對實體的申明,用戶和一些其他元信息。申明以下三種。

  • 注冊的申明

  • 公開的申明

  • 私有的申明

  • 如:

    {"sub": "1234567890","name": "John Doe","admin": true }

    這個JSON經過Base64編碼后形成JWT的第二部分。

    Signature

    簽名用于驗證JWT的發送者是誰,并確保消息在過程中不會被篡改。

    創建簽名部分,你需要用到編碼后的header、編碼后的payload、密鑰、在header中指定的算法。

    如下使用HMAC SHA256算法創建簽名的方式:

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

    講完了上面3個部門,最后就是由這3部分組成了。每個部分經過base64編碼后,以.分隔。它能很容易的在HTML和HTTP環境中傳遞,也比像類似xml標準格式這樣的更緊湊。

    如果想使用JWT并將這些概念應用到實踐中,您可以使用官網首頁下面的調試器來解碼、驗證和生成JWTs。

    JWT的工作原理

    在身份驗證中,當用戶成功地使用他們的憑證登錄時,將返回一個JWT的token,并且必須在本地保存(通常在本地保存,但也可以使用cookie),而不是在服務器中創建會話并返回cookie的傳統方法。

    當用戶想要訪問受保護的路由或資源時,用戶代理應該發送token,通常是在使用Bearer模式的Authorization頭參數中。標題的內容應該如下所示:

    Authorization: Bearer <token>

    這是一個無狀態的身份驗證機制,因為用戶狀態永遠不會保存在服務器內存中。服務器的受保護路由將在授權頭中檢查有效的JWT,如果它存在,用戶將被允許訪問受保護的資源。由于JWTs是獨立的,所以所有必要的信息都在那里,減少了多次查詢數據庫的需求。

    這使得完全可以依賴無狀態的數據api,甚至向下游服務發出請求。哪個域名api服務并不重要,因為CORS攻擊不會成為一個問題,因為它不使用cookie。

    工作流程如下:

    JWT的優點

    • 因為JSON數據格式的通用性,所以JWT是可以跨語言的,主流語言都可以支持。

    • payload部分可以存儲其他業務邏輯所必要的非敏感信息。

    • JWT構成簡單,字節占用很小,所以非常便于傳輸的。

    • 不需要在服務端保存會話信息,易于應用的擴展和安全等。

    JWT的使用注意

  • 不要在payload存放敏感信息,因為該部分是可解密的。

  • 保存好secret私鑰十分重要。

  • 盡量使用https協議

  • JWT參考網站

    官網:https://jwt.io/

    官方介紹:https://jwt.io/introduction/

    支持類庫:https://jwt.io/#libraries-io

    RFC 7519規范:https://tools.ietf.org/html/rfc7519

    明天帶來JWT的Java實戰。


    總結

    以上是生活随笔為你收集整理的JSON Web Token (JWT),服务端信息传输安全解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

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