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)