JWT協議學習筆記

官方 https://jwt.iohtml

英文原版 https://www.ietf.org/rfc/rfc7519.txthttps://tools.ietf.org/html/rfc7519git

中文翻譯 https://www.jianshu.com/p/10f5161dd9dfweb

 

1. 概述算法

JSON Web Token(JWT)是一種緊湊的、URL安全的方法用來表示json

在兩個部分之間的傳輸聲明. 一般由2種實現: JWS=JSON Web Signature,JWE=JSON Web Encryption。實際上JWT包含了一個你們族。安全

https://tools.ietf.org/html/rfc7515 = JWS數據結構

https://tools.ietf.org/html/rfc7516 =JWEapp

https://tools.ietf.org/html/rfc7517 = JWKide

https://tools.ietf.org/html/rfc7518 = JWA網站

https://tools.ietf.org/html/rfc7519 = JWT

https://tools.ietf.org/html/rfc7520 =JOSE

 

2.定義

JWS

 

JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.

JSON Web Signature (JWS)表示使用基於JSON的數據結構用數字簽名或消息身份驗證代碼(MACS)保護的內容。

JWE

JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures.

JSON Web Encryption(JWE)表示基於JSON數據結構的加密內容。

JWK

A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key.

JSON Web Key(JWK)是一個表示加密密鑰的JSON數據結構。

JWA

This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications.

本規範註冊了密碼算法和標識符。用於JSON Web簽名(JWS)、JSON Web加密

(JWE)和json web key(JWK)規範。

 

仔細扣字眼去理解以上文縐縐的定義,能夠發現 JW(*)家族並非同級關係。

舉個不是很恰當的例子:

一個json:

{"action":"8點進攻"},

對這個json作數字簽名,用而後用 內容 || "." || 簽名 的格式包裝

{"action":"8點進攻"}.eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9

這個就是JWS

 

對這個json

{"action":"8點進攻"}

{"action":"8點進攻"}.eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9

加密,造成

05kLzcSr4qKAq7YN7e9jwQRb23

這個就是JWE.

 

以上例子說明JSE和JSW的核心區別是一個簽名(數據沒有被篡改,來源是真實),一個加密(明文沒法被第三者知曉)。通常把JSE做爲多JWT的實現用來作網站的請求驗證。

 

 

3.結構

 

 

格式

例子,注意標點 . 的存在

JWS

BASE64URL(UTF8(JWS Protected Header)) || '.' ||

BASE64URL(JWS Payload) || '.' ||

BASE64URL(JWS Signature)

eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9

.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ

.

dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

JWE

BASE64URL(UTF8(JWE Protected Header)) || '.' ||

BASE64URL(JWE Encrypted Key) || '.' ||

BASE64URL(JWE Initialization Vector) || '.' ||

BASE64URL(JWE Ciphertext) || '.' ||

BASE64URL(JWE Authentication Tag)

eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.

OKOawDo13gRp2ojaHV7LFpZcgV7T6DVZKTyKOMTYUmKoTCVJRgckCL9kiMT03JGe

ipsEdY3mx_etLbbWSrFr05kLzcSr4qKAq7YN7e9jwQRb23nfa6c9d-StnImGyFDb

Sv04uVuxIp5Zms1gNxKKK2Da14B8S4rzVRltdYwam_lDp5XnZAYpQdb76FdIKLaV

mqgfwX7XWRxv2322i-vDxRfqNzo_tETKzpVLzfiwQyeyPGLBIO56YJ7eObdv0je8

1860ppamavo35UgoRdbYaBcoh9QcfylQr66oc6vFWXRcZ_ZT2LawVCWTIy3brGPi

6UklfCpIMfIjf7iGdXKHzg.

48V1_ALb6US04U3b.

5eym8TW_c8SuK0ltJ3rpYIzOeDQz7TALvtu6UG9oMo4vpzs9tX_EFShS8iB7j6ji

SdiwkIr3ajwQzaBtQD_A.

XFBoMYUZodetZdvTiFvSkQ

JWK

 

{"kty":"EC",

"crv":"P-256",

"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",

"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",

"kid":"Public key used in JWS spec Appendix A.3 example"

}

相關文章
相關標籤/搜索