標籤:過程 數位簽章 簽名 交換 登入 避免 ade class url
1.JWT即JSON Web Tokens,他可以用來安全的傳遞資訊,因為這些資訊是經過數位簽章的
2.JWT可以使用一種密碼編譯演算法比如HMAC 演算法,也可以使用公開金鑰/私密金鑰的非對稱演算法
3.因為JWT簽名後的資訊夠短,可以放在url裡、request body裡、http header裡,傳輸夠快。
4.荷載資訊裡包含所有你想要的,避免不止一次的去查詢資料庫
5.JWT的使用情境主要包括:
1) 認證,這是比較常見的使用情境,只要使用者登入過一次系統,之後的請求都會包含簽名出來的token,通過token也可以用來實現單點登入。
2)交換資訊,通過使用金鑰組來安全的傳送資訊,可以知道寄件者是誰、放置訊息被篡改。
6.JSON Web Tokens由三部分組成,用英文句點分割(.) ,一般看起來例如:xxxxx.yyyyy.zzzzz
分為:
- Header 頭資訊
- Payload 荷載資訊,實際資料
- Signature 由頭資訊+荷載資訊+密鑰 組合之後進行加密得到
1) Header 頭資訊通常包含兩部分,type:代表token的類型,這裡使用的是JWT類型。 alg:使用的Hash演算法,例如HMAC SHA256或RSA.
{ "alg": "HS256", "typ": "JWT"}
// 這會被經過base64Url編碼形成第一部分
2)Payload 一個token的第二個部分是荷載資訊,它包含一些聲明Claim(實體的描述,通常是一個User資訊,還包括一些其他的中繼資料)
聲明分三類:
1)Reserved Claims,這是一套預定義的聲明,並不是必須的,這是一套便於使用、操作性強的聲明。包括:iss(issuer)、exp(expiration time)、sub(subject)、aud(audience)等
2)Plubic Claims,
3)Private Claims,交換資訊的雙方自訂的聲明
{ "sub": "1234567890", "name": "John Doe", "admin": true}
// 同樣經過Base64Url編碼後形成第二部分
3) signature 使用header中指定的演算法將編碼後的header、編碼後的payload、一個secret進行加密
例如使用的是HMAC SHA256演算法,大致流程類似於: HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
這個signature欄位被用來確認JWT資訊的寄件者是誰,並保證資訊沒有被修改
7.這個JSON Web Tokens包含了必要的使用者資訊,減少了對資料庫進行多次查詢的需要。
8.由於沒有使用Cookies,Cross-Origin Resource Sharing (CORS) ,跨域的資源訪問不會成為問題。
JWT官網有一張圖描述了JWT的認證過程:
JWT(JSON Web Tokens)