JWT(JSON Web Token)是一種用於身份驗證的開放標準,它可以將一些有用的信息封裝到一個安全的、符合 JSON 格式的字符串中,因此在網絡傳輸中比較常見。
一、JWT的生成方式
JWT 的生成分為以下三個步驟:
1、Header(頭部信息):JWT 頭部用於描述關於該 JWT 的最基本的信息,例如其類型以及所使用的加密算法等,基本上是固定的內容,格式如下:
{ "alg": "HS256", "typ": "JWT" }
2、Payload(荷載):JWT 的有效載荷部分主要為我們需要之間需要傳遞的信息,如用戶ID、用戶名、密碼等數據信息。它的格式也是一個 JSON 對象,分為註冊聲明,公共聲明和私有聲明三種,註冊聲明建議(但不強制)要求使用,公共聲明和私有聲明可以根據需求加入。例如:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
3、Signature(簽名):在生成簽名時,你需要指定一個密鑰,這個密鑰只有服務器能夠知道,然後使用你在 header 中指定的算法(例如 HS256),將 base64UrlEncode(header) + “.” + base64UrlEncode(payload) 的結果進行加密處理,生成簽名。簽名可以保證 JWT 的可靠性。例如:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )
這三個基本的步驟是使用 JWT 的最基本的手動實現方式,但是,現在有很多成熟的 JWT 庫可以用來生成 JWT。
二、在線生成
如果你只是想在線生成一些簡單的 JWT,可以使用在線工具,例如 jwt.io。具體操作可以參考以下步驟:
1、打開jwt.io
2、設置Header信息
在左側的輸入框中輸入JWT的Header信息,jwt.io會自動解析 Header 的內容,生成一個JSON格式的Header數據。
{ "alg": "HS256", "typ": "JWT" }
3、設置Payload信息
在下方的輸入框中輸入JWT的Payload信息,該塊作為JWT用戶身份信息的載體。以上圖為例:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
4、設置Secret信息和Alg算法
在jwt.io右側的輸入框中,填入具體的加密算法和Secret。例如選擇HS256加密方式,輸入密鑰「123456」,jwt.io會自動為您生成JWT Token結果,從而驗證一下填入的信息是否正確。
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), 123456 )
三、自行開發JWT生成工具
當我們需要定製自己的JWT生成流程時,可以使用第三方工具庫生成。下面示範一下如何使用 jsonwebtoken 庫來生成一組 JWT:
1、安裝 jsonwebtoken
npm install jsonwebtoken
2、引用 jsonwebtoken
const jwt = require('jsonwebtoken');
3、生成一個 JWT
const token = jwt.sign({ foo: 'bar' }, 'shhhhh');
上面代碼生成一個 JWT。第一個參數是 Payload 提供的信息對象,第二個是一個密鑰(字符串格式)。
jsonwebtoken 還允許你添加選項,詳見 jsonwebtoken 的官方文檔。相較於手動生成方式,使用第三方工具庫可以使開發更加方便,並且對於安全問題,第三方工具庫也一定程度上提供了保障。
四、小結
JWT 能夠保證數據傳輸的安全性,同時具有數據簡潔,低成本的特性。在線JWT生成工具可以幫助我們快速生成JWT,而自行開發 JWT 生成工具則可以根據業務需求實現自定義的生成需要,更加便捷。總體而言,這是一個十分實用的安全工具。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/277367.html