本文是我在學(xué)習(xí)JWT過(guò)程中一些簡(jiǎn)單的總結(jié),歡迎大家批評(píng)指正脆粥。
參考文章
簡(jiǎn)介
JWT(JSON Web Token)是一種非常簡(jiǎn)單的規(guī)范砌溺,可以讓我們通過(guò)它生成一種特定格式的token,來(lái)實(shí)現(xiàn)client和server之間的安全傳遞信息变隔。并且不需要后臺(tái)來(lái)管理這個(gè)token规伐,只需要在每次用戶請(qǐng)求接口的時(shí)候?qū)@個(gè)token進(jìn)行計(jì)算即可。我把它理解為是一種特殊的session匣缘。
組成
JWT由三部分組成:header猖闪、payload鲜棠、signature。
- header:所使用加密算法培慌。進(jìn)行base64編碼
- payload:一條包括JWT標(biāo)準(zhǔn)定義的幾個(gè)字段和用戶自定義的字段的json信息豁陆。然后進(jìn)行base64編碼
- signature:用header里描述的算法,和后臺(tái)的秘鑰吵护,把header和payload的base64字符串拼接完以后的字符串献联,進(jìn)行加密
樣例
JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.XbPfbIHMI6arZ3Y922BhjWgQzWXcXNrz0ogtVhfEd2o
header:
{
"alg": "HS256",
"typ": "JWT"
}
payload:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
使用方式
- 用戶登錄
- 后臺(tái)驗(yàn)證用戶名密碼以后,簽發(fā)token何址,并存儲(chǔ)到cokkie
- 用戶再次訪問(wèn)
- 后臺(tái)從cokkie中獲取token;驗(yàn)證payload中token簽發(fā)者进胯、接受者用爪、生效失效時(shí)間等;并重新根據(jù)header中的算法胁镐,把header和payload加密偎血,與signature比對(duì)是否一致
- 比對(duì)一致以后從payload中獲取用戶id等自定義信息,進(jìn)行業(yè)務(wù)處理盯漂,相應(yīng)用戶信息
與普通session存儲(chǔ)方式對(duì)比
后臺(tái)無(wú)需存儲(chǔ)session颇玷,但需要每次請(qǐng)求都要重新計(jì)算token是否有效。
還有很多就缆,大家可以一起討論帖渠。
注
base64編碼是可逆的,所以不要在payload里存放敏感信息竭宰。