JWT(Json Web Token)認證原理分析

2022-04-08 06:27:19 字數 1964 閱讀 1573

目錄

# 優點:

1)資料庫不需要儲存token,所以伺服器的 io 操作會減少(沒有io寫操作)

2)客戶端存token,伺服器只儲存簽發與校驗演算法,執行效率高

3)簽發與校驗演算法在多個伺服器上可以直接統一,所以jwt認證規則下,伺服器做集群非常便捷

# 突破點:

1)token必須要有多個部分組成,有能反解的部分,也要有不能反解的部分 - jwt採用的都是三段式

2)token中必須包含過期時間,保證token的安全性與時效性

# jwt原理:

1)jwt由 頭.載荷.簽名 三部分組成

2)每一部分資料都是乙個json字典,頭和載荷採用 base64 可逆加密演算法加密,簽名採用 hs256 不可逆加密

內容:1)頭(基本資訊):可逆不可逆採用的加密演算法、公司名稱、專案組資訊、開發者資訊...

2)載荷(核心資訊):使用者主鍵、使用者賬號、客戶端裝置資訊、過期時間...

3)簽名(安全資訊):頭的加密結果、載荷的加密結果、伺服器的安全碼(鹽)...

# 簽發演算法:

1)頭內容寫死(可以為空{}):公司、專案組資訊都是固定不變的

=> 將資料字典轉化成json字串,再將json字串加密成base64字串

2)載荷的內容:使用者賬號、客戶端裝置資訊是由客戶端提供,使用者主鍵是客戶端提供賬號密碼校驗user表通過後才能確定,過期時間根據當前時間與配置的過期時間相結合產生

=> 將資料字典轉化成json字串,再將json字串加密成base64字串

3)簽名的內容,先將頭的加密結果,載荷的加密結果作為成員,再從伺服器上拿安全碼(不能讓任何客戶端知道),也可以額外包含載荷的部分(使用者資訊,裝置資訊)

=> 將資料字典轉化成json字串,再將json字串不可逆加密成hs256字串

4)將三個字串用 . 連線產生三段式token

# 校驗演算法:

1)從客戶端提交的請求中拿到token,用 . 分割成三段(如果不是三段,非法)

2)頭(第一段)可以不用解密

3)載荷(第二段)一定需要解密,先base64解密成json字串,再轉換成json字典資料

i)使用者主鍵與使用者賬號查詢user表確定使用者是否存在

ii)裝置資訊用本次請求提交的裝置資訊比對,確定前後是否是同一裝置,決定是否對使用者做安全提示(eg:簡訊郵箱提示異地登入)(同樣的安全保障還可以為ip、登入地點等)

iii)過期時間與當前時間比對,該token是否在有效時間內

4)簽名(第三段)採用加密碰撞校驗

i)將頭、載荷加密字串和資料庫安全碼形成json字典,轉換成json字串

ii)採用不可逆hs256加密形成加密字串

iii)新的加密字串與第三段簽名碰撞比對,一致才能確保token是合法的

5)前方演算法都通過後,載荷校驗得到的user物件,就是該token代表的登入使用者(django專案一般都會把登入使用者存放在request.user中)

# 重新整理演算法:

1)要在簽發token的載荷中,額外新增兩個時間資訊:第一次簽發token的時間,最多往後重新整理的有效時間

2)每一請求攜帶token,不僅走校驗演算法驗證token是否合法,還要額外請求重新整理token的介面,完成token的重新整理:校驗規則與校驗演算法差不多,但是要將過期時間後移(沒有超過有效時間,產生新token給客戶端,如果超過了,重新整理失敗)

3)所以伺服器不僅要配置過期時間,還需要配置最長重新整理時間

OAuth認證原理

user browser client web server server service provider oauth1 1 client server 輸入client key 獲取ungranted token 2 user server 輸入ungranted token,callback ...

android Oauth認證原理

1 什麼是oauth 一種安全認證的協議 為使用者資源的授權提供了乙個安全 開放而又簡易的標準 不會使第三方觸及到使用者的賬號資訊 2 oauth當中的角色 serviceprovider 服務提供者 通常是 例如 網盤,微博或博客 user 使用者 使用者持有 服務提供者 的 帳號和和密碼,並且可...

SSH 認證原理

ssh 之所以能夠保證安全,原因在於它採用了公鑰加密。整個過程是這樣的 遠端主機收到使用者的登入請求,把自己的公鑰發給使用者。使用者使用這個公鑰,將登入密碼加密後,傳送回來。遠端主機用自己的私鑰,解密登入密碼,如果密碼正確,就同意使用者登入。這個過程本身是安全的,但是實施的時候存在乙個風險 如果有人...