JWT
JWT是什么?
Json web token (JWT)是為了網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開發(fā)標(biāo)準(zhǔn)(RFC7519)迎吵,該token被設(shè)計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息赴背,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息晶渠,該token也可以直接被用于認(rèn)證凰荚,也可以加密。
傳統(tǒng)的登錄保持與接口權(quán)限是如何實現(xiàn)的乱陡?
- 用戶向服務(wù)器發(fā)送用戶名和密碼浇揩。
- 服務(wù)器驗證通過后,在當(dāng)前對話(session)里面保存相關(guān)數(shù)據(jù)憨颠,比如用戶角色、登錄時間等等积锅。
- 服務(wù)器向用戶返回一個session_id爽彤,寫入用戶Cookie。
- 用戶隨后的每一次請求缚陷,都會通過Cookie适篙,將session_id傳回服務(wù)器。
- 服務(wù)器收到session_id箫爷,找到前期保存的數(shù)據(jù)嚷节,由此得知用戶的身份聂儒。
JWT的數(shù)據(jù)結(jié)構(gòu)
組成
JWT的特點
- JWT默認(rèn)是不加密,但也是可以加密的硫痰。生成原始Token以后衩婚,可以用密鑰在加密一次。
- JWT不加密的情況下效斑,不能將秘密數(shù)據(jù)寫入JWT非春。
- JWT不僅可以用于認(rèn)證,也可以用于交換信息缓屠。有效使用JWT奇昙,可以降低服務(wù)器查詢數(shù)據(jù)庫的次數(shù)。
- JWT的最大缺點是敌完,由服務(wù)器不保存session狀態(tài)储耐,因此無法在使用過程中廢止某個token,或者更改token權(quán)限滨溉。也就是說弧岳,一旦JWT簽發(fā)了,在到期之前就會始終有效业踏,除非服務(wù)器部署額外的邏輯禽炬。
- JWT本身包含了認(rèn)證信息,一旦泄露勤家,任何人都可以獲得該令牌的所有權(quán)限腹尖。為了減少盜用,JWT的有效期應(yīng)該設(shè)置得比較短伐脖。對于一些比較重要的權(quán)限热幔,使用時應(yīng)該再次對用戶進行認(rèn)證。
- 為了減少盜用讼庇,JWT不應(yīng)該使用HTTP協(xié)議明碼傳輸绎巨,要使用HTTPS協(xié)議傳輸。