首先jwt 和session機制 都是用戶認證的,oauth 不是web
session 的流程:json
一、用戶向服務器發送用戶名和密碼。 二、服務器驗證經過後,在當前對話(session)裏面保存相關數據, 好比用戶角色、登陸時間等等。 三、服務器向用戶返回一個 session_id,寫入用戶的 Cookie。 四、用戶隨後的每一次請求,都會經過 Cookie,將 session_id 傳回服務器。 五、服務器收到 session_id,找到前期保存的數據,由此得知用戶的身份。
jwt 的流程:跨域
即 :(json web token) 一、用戶向服務器發送用戶名和密碼。 二、服務器驗證經過後,生成jwt,能夠有選擇的在其中 保存用戶信息及數據。也能夠加密。 三、服務器向用戶返回jwt。 四、用戶隨後的每一次請求,都會在 cookie 或者 header或參數裏,將 jwt 傳回服務器鑑權。 五、服務器收到jwt,找到前期保存的數據,由此得知用戶的身份。
jwt 長相:安全
分爲 頭部(header),載荷(payload),簽證(signature). 用 「.」 分隔。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1 NDM0ODg3NjgsImp0aSI6ImFjYzhmZjIzLWM1MjgtNDk3OS04N TYwLWY0NGFmYWNhNDY4MiIsImlzcyI6ImJpenN2YyIsIm5iZ iI6NTQzNDgxNTY4LCJzdWIiOiJ0b2tlbi14ajZqOTo3emg1Y md2OGI1cWZrN2JoNnJxZ3o3djV0OGJ2amhiNHNoazQ5aGh6O GtjcWN6NmpnNWI3ejIifQ.dRKURNOUFOlgO7zBxMajF7-8Wn 0zYs8x2t0UU6SYtP4
即: session 存數據於server端,而jwt 存數據於client服務器
優缺 :cookie
jwt 沒有跨域問題、集羣下登陸信息同步的問題。 一旦簽發,到期前沒法簡單廢止,最好用https。 server無狀態,性能高。 session 擴展性很差,存在跨域 和 集羣session同步的問題。 面對csrf 攻擊,不如jwt。
目的在於讓客戶端安全可控地獲取"用戶"的受權session
好比說,登陸微博(客戶端)的時候,懶得新建帳號了就用qq帳號登陸,選擇qq登陸。這時 就是oauth登場時刻了。 的場景。如今通常是oauth2,版本2.性能
oauth場景,客戶端沒必要保存登陸用戶(qq)的登陸密碼。 更精細的控制權限,即權限的到期時間,提高安全性。 有四種模式: 受權碼模式(authorization code) 簡化模式(implicit) 密碼模式(resource owner password credentials) 客戶端模式(client credentials)