和jwt_秒懂 JWT
作者 | 喵叔
責編 | 胡巍巍
出品 | 程序人生(ID:coder_life)
JWT 英文名是 Json Web Token ,是一種用于通信雙方之間傳遞安全信息的簡潔的、URL安全的表述性聲明規范,經常用在跨域身份驗證。
JWT 以 JSON 對象的形式安全傳遞信息。因為存在數字簽名,因此所傳遞的信息是安全的。
在講解 JWT 之前我們先來看一個問題。我們都知道 Internet 服務的身份驗正過程是這樣的,客戶端向服務器發送登錄名和登錄密碼,服務器驗證后將對應的相關信息保存到當前會話中,這些信息包括權限、角色等數據。
服務器向客戶端返回 Session ,Session 信息都會寫入到客戶端的 Cookie 中,后面的請求都會從 Cookie 中讀取 Session 發送給服務器,服務器在收到 Session 后會對比保存的數據來確認客戶端身份。
但是上述模式存在一個問題,無法橫向擴展。在服務器集群或者面向服務且跨域的結構中,需要數據庫來保存 Session 會話,實現服務器之間的會話數據共享。
在單點登錄中我們會遇到上述問題,當有多個網站提供同一撥服務,那么我們該怎么實現在甲網站登陸后其他網站也同時登錄呢?
其中一種方法是持久化 Session 數據,也就是上面所說的將 Session 會話存到數據庫中。這個方法的優點是架構清晰明了。
但是缺點也非常明顯,就是架構修改很困難,驗證邏輯需要重寫,并且整體依賴于數據庫,如果存儲 Session 會話的數據庫掛掉那么整個身份認證就無法使用,進而導致系統無法登錄。要解決這個問題我們就用到了 JWT 。
JWT 簡述
客戶端身份經過服務器驗證通過后,會生成帶有簽名的 JSON 對象并將它返回給客戶端。客戶端在收到這個 JSON 對象后存儲起來。
在以后的請求中客戶端將 JSON 對象連同請求內容一起發送給服務器,服務器收到請求后通過 JSON 對象標識用戶,如果驗證不通過則不返回請求的數據。
驗證不通過的情況有很多,比如簽名不正確、無權限等。在 JWT 中服務器不保存任何會話數據,使得服務器更加容易擴展。
Base64URL 算法
在講解 JWT 的組成結構前我們先來講解一下 Base64URL 算法。這個算法和 Base64 算法類似,但是有一點區別。
我們通過名字可以得知這個算法使用于 URL 的,因此它將 Base64 中的 + 、 / 、 = 三個字符替換成了 - 、 _ ,刪除掉了 = 。因為這個三個字符在 URL 中有特殊含義。
JWT 組成結構
JWT 是由三段字符串和兩個 . 組成,每個字符串和字符串之間沒有換行(類似于這樣:xxxxxx.yyyyyy.zzzzzz),每個字符串代表了不同的功能,我們將這三個字符串的功能按順序列出來并講解:
1. JWT 頭
JWT 頭描述了 JWT 元數據,是一個 JSON 對象,它的格式如下:
json
{
"alg":"HS256
總結
以上是生活随笔為你收集整理的和jwt_秒懂 JWT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么点亮段码屏_段码液晶屏有鬼影怎么处理
- 下一篇: python安装unittest_pyt