從官網裏能夠看到,JWT是一個開放協議,它以一個可靠的,獨立的方式方便在各方之間以Json的方式傳輸數據。Jwt能夠使用祕鑰(HMAC算法)或者公鑰/私鑰(RSA or ECDSA)的方式進行簽名html
經常使用如登陸,登陸成功後返回JWT,後續請求都會帶上這個JWT,好比SSO算法
使用公鑰/私鑰對簽名時,能夠在不一樣對象間傳輸信息跨域
一個典型的JWT格式以下:編碼
xxx.yyy.zzz
能夠看到JWT由三部分組成,不一樣部分用.結合起來加密
Header格式以下:翻譯
{ "alg": "HS256", "typ": "JWT" }
alg表示所使用的算法,如HMAC,SHA256, RSA
typ表示token類型,也就是 JWT
Header通過base64編碼後會成爲JWT的第一部分code
Payload包含了一些Claims,Claims裏又包含了實體和額外信息,有三種類型的Claimsjwt
一個典型的Payload以下:htm
{ "sub": "1234567890", "name": "John Doe", "admin": true }
registered Claim是預約義的聲明,不強制但建議使用,在RFC7519裏能夠看到,預約義的聲明有如下幾種對象
public Claim是用戶能夠自定義的,可是爲了不使用衝突,應該遵循IANA JSON Web Token Registry 規範,
private Claim就是用來存貯交換信息的部分
Payload通過base64編碼後就成爲了JWT的第二部分
將編碼後的Header和Payload組合在一塊兒,再加上secret,通過指定的算法加密就造成了JWT的第三部分
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
最後用.號串聯起來,最終就生成了一個JWT token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.b21wYW55X2lkIjoiZWQ5OGE4YTMtMWMyNi00OTM5LTg0MDQtMjU0OGUyMjgzOWVmIn0sImV4cCI6MTU2NzEzNzg0NywianRpVtIn0.sAlzke31nRGU_Gh_Ux8uh9uKmCnSYgQTk02GYzE97sU
Authorization: Bearer <token>