jwt、session、oauth 異同
阿新 • • 發佈:2018-11-29
1,jwt 和session機制
首先jwt 和session機制 都是使用者認證的,oauth 不是
session 的流程:
1、使用者向伺服器傳送使用者名稱和密碼。
2、伺服器驗證通過後,在當前對話(session)裡面儲存相關資料,
比如使用者角色、登入時間等等。
3、伺服器向用戶返回一個 session_id,寫入使用者的 Cookie。
4、使用者隨後的每一次請求,都會通過 Cookie,將 session_id 傳回伺服器。
5、伺服器收到 session_id,找到前期儲存的資料,由此得知使用者的身份。
jwt 的流程:
即 :(json web token) 1、使用者向伺服器傳送使用者名稱和密碼。 2、伺服器驗證通過後,生成jwt,可以有選擇的在其中 儲存使用者資訊及資料。也可以加密。 3、伺服器向用戶返回jwt。 4、使用者隨後的每一次請求,都會在 cookie 或者 header或引數裡,將 jwt 傳回伺服器鑑權。 5、伺服器收到jwt,找到前期儲存的資料,由此得知使用者的身份。
jwt 長相:
分為 頭部(header),載荷(payload),簽證(signature). 用 “.” 分隔。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1 NDM0ODg3NjgsImp0aSI6ImFjYzhmZjIzLWM1MjgtNDk3OS04N TYwLWY0NGFmYWNhNDY4MiIsImlzcyI6ImJpenN2YyIsIm5iZ iI6NTQzNDgxNTY4LCJzdWIiOiJ0b2tlbi14ajZqOTo3emg1Y md2OGI1cWZrN2JoNnJxZ3o3djV0OGJ2amhiNHNoazQ5aGh6O GtjcWN6NmpnNWI3ejIifQ.dRKURNOUFOlgO7zBxMajF7-8Wn 0zYs8x2t0UU6SYtP4
即: session 存資料於server端,而jwt 存資料於client
優缺 :
jwt
沒有跨域問題、叢集下登入資訊同步的問題。
一旦簽發,到期前無法簡單廢止,最好用https。
server無狀態,效能高。
session
擴充套件性不好,存在跨域 和 叢集session同步的問題。
面對csrf 攻擊,不如jwt。
2,oauth 用於第三方認證
目的在於讓客戶端安全可控地獲取"使用者"的授權
比如說,登入微博(客戶端)的時候,懶得新建賬號了就用qq賬號登入,選擇qq登入。這時 就是oauth登場時刻了。 的場景。現在一般是oauth2,版本2.
oauth場景,客戶端不必儲存登入使用者(qq)的登入密碼。 更精細的控制權限,即許可權的到期時間,提升安全性。 有四種模式: 授權碼模式(authorization code) 簡化模式(implicit) 密碼模式(resource owner password credentials) 客戶端模式(client credentials)