FTC 起訴 Facebook 被駁回,無法證明其壟斷
阿新 • • 發佈:2021-06-29
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 分為 JWS (JSON Web Signature)和JWE(JSON Web Encryption)兩種實現方式
SON Web Signature(JWS)
JSON Web Signature是一個有著簡單的統一表達形式的字串:
頭部(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的Python庫
安裝
pip install pyjwt
用例
>>> import jwt >>> encoded_jwt = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256') >>> encoded_jwt 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg' >>> jwt.decode(encoded_jwt, 'secret', algorithms=['HS256']) {'some': 'payload'}