javascript
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.zzzzzHeader
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),服务端信息传输安全解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结余是什么意思 结余是什么的意思
- 下一篇: gradle idea java ssm