1. 程式人生 > 資訊 >FTC 起訴 Facebook 被駁回,無法證明其壟斷

FTC 起訴 Facebook 被駁回,無法證明其壟斷

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的標準所定義的。

  1. iss: 該JWT的簽發者
  2. sub: 該JWT所面向的使用者
  3. aud: 接收該JWT的一方
  4. exp(expires): 什麼時候過期,這裡是一個Unix時間戳
  5. iat(issued at): 在什麼時候簽發的

後面的資訊可以按需補充。 JSON內容要經Base64 編碼生成字串成為PayLoad。

簽名(signature)

這個部分header與payload通過header中宣告的加密方式,使用金鑰secret進行加密,生成簽名。 JWS的主要目的是保證了資料在傳輸過程中不被修改,驗證資料的完整性。但由於僅採用Base64對訊息內容編碼,因此不保證資料的不可洩露性。所以不適合用於傳輸敏感資料。

JSON Web Encryption(JWE)

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

JWE組成

具體生成步驟為:

  1. JOSE含義與JWS頭部相同。
  2. 生成一個隨機的Content Encryption Key (CEK)。
  3. 使用RSAES-OAEP 加密演算法,用公鑰加密CEK,生成JWE Encrypted Key。
  4. 生成JWE初始化向量。
  5. 使用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'}