JSON web Token,簡稱JWT基矮,本質(zhì)是一個token淆储,是一種緊湊的URL安全方法,用于在網(wǎng)絡(luò)通信的雙方之間傳遞家浇。一般放在HTTP的headers 參數(shù)里面的authorization里面本砰,值的前面加Bearer關(guān)鍵字和空格。除此之外钢悲,也可以在url和request body中傳遞点额。
JWT有三部分依順序用點號(".")鏈接而成:1.header青团,2.payload,3.signature咖楣。
header里面說明類型和使用的算法督笆,比如:
{
"alg": "HS256",
"typ": "JWT"
}
說明是JWT(JSON web token)類型,使用了HMAC SHA 算法诱贿。這個值在鏈接之前需要用base64UrlEncoding加密娃肿。
payload是一組claim的值。claim包含claim name和claim value珠十。前者是string類型料扰,后者可以是任意的json對象。claims有三種類型:reserved claim焙蹭,public claim 和 private claim晒杈。reserved claim是預(yù)先定義好的,不強(qiáng)制使用但推薦使用的一組claim孔厉,比如 iss(issuer 發(fā)布者), exp(expiration time 失效時間)拯钻,sub(subject 主題),aud(audience 聽眾) 等撰豺。用于說明一些有用的交互信息粪般。
public claim,是指由JTWs所定義的,但是為了防止和其他名字發(fā)生重名的claims污桦。它們需要定義成IANA JSON web token registery 里面 或者定義成一個URI亩歹,這個URI包含一組固定的命名。
private claim 是客戶自己創(chuàng)建的用于彼此分享信息凡橱。
舉個例子:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
signature 就是用點號將header和payload聯(lián)系起來小作,然后用header里面指定的加密方法進(jìn)行加密后的字符串。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
應(yīng)用場景:
1.瀏覽器將用戶名和密碼以post請求的方式發(fā)送給服務(wù)器稼钩。
2.服務(wù)器接受后驗證通過顾稀,用一個密鑰生成一個JWT。
3.服務(wù)器將這個生成的JWT返回給瀏覽器变抽。
4.瀏覽器將JWT包含在authorization header里面础拨,然后發(fā)送請求給服務(wù)器。
5.服務(wù)器可以在JWT中提取用戶相關(guān)信息绍载。進(jìn)行驗證。
6.服務(wù)器驗證完成后滔蝉,發(fā)送響應(yīng)結(jié)果給瀏覽器击儡。
OAuth2.0 是一個RFC協(xié)議,可以參考RFC6749蝠引,它定義了一個安全認(rèn)證框架阳谍。
簡單的說包含authentication 和authorization蛀柴。 而openID connect 是基于這個框架上
的認(rèn)證實現(xiàn)。上面說的JWT矫夯,也就是JSON web token, 在里面得到了應(yīng)用鸽疾,可以解決
跨域的問題,詳細(xì)的資料训貌,需要自己專研制肮。