談到jwt,我們必須了解到jwt是用來幹什麼的,我的個人理解jwt是用來處理儲存分布式的使用者資訊的一種工具。
在沒有jwt之前,我們通常是如何儲存使用者的登入資訊的呢?
session儲存:通過登入後,將使用者的的登入資料儲存在session儲存,等到需要時再從session中取出來進行使用。但是這樣一來就出現了乙個問題,隨著分布式時代的到來,session的一些問題就暴露了出來,比如無法跨服務進行共享使用者的登入狀態以及容易被csrf攻擊等,於是出現了第二種技術。
redis配合token,將token儲存在redis中,通過token請求去讀取存放在redis的資訊,這樣子就避免了記憶體中的使用者資訊如何被共享的問題,並且因為token很難被偽造,可以輕鬆避免一些低階csrf攻擊,但是這種依然會有一些 問題(比如redis失效,崩潰,以及儲存成本等原因),出現了第三種儲存儲存使用者登入狀態的方式,那就是jwt。
jwt雖然也是基於token認證推出的一種登入機制,但是原理卻和以上兩種有本質區別。因為它是基於客戶端儲存的的。以上兩種都是基於伺服器認證然後儲存在伺服器端的。
jwt採用的非對稱加密的形式,將加密過後使用者資訊以及過期時間返回對應的token到客戶端進行儲存,然後每次客戶端都需要傳入傳入token,然後伺服器會再次對token進行解密取出響應的資訊進行處理。
基於token的身份認證是無狀態的,伺服器或者session中不會儲存任何使用者資訊。
安全:因為沒有經過cokie以及session等會話機制處理,所以可以輕鬆防禦csrf攻擊,而且jwt返回的token會有過期時間,所以會讓黑客拿到過期token依然無法通過伺服器認證
oauth2是一種授權框架 ,jwt是一種認證協議 -無論使用哪種方式切記用https來保證資料的安全性
前後端分離處理關於跨域時有三種解決方案
後端處理,因為一般token是在hender中通過制定authorization來攜帶token,所以需要在跨域cors中指定authorization
前端處理之http-proxy-middleware :前端跨域通過這個**來**請求為閘道器網域名稱,來通過跨域
萬能的nginx,我就不說了。
最後放上我的cors處理方案
//允許的域,不要寫*,否則cookie就無法使用了
//允許傳入的跨域方法
// authorization需要加上 要不然不允許跨域 攜帶
// 允許攜帶cookie
headers.add(httpheaders.access_control_max_age, max_age);
最後引用:
知乎大佬的解釋 5分鐘了解jwt
關於const的一些事
一 const能做哪些事情呢?1 可以定義const常量 2 可以修飾函式的形參和返回值 3 可以修飾函式的定義體 意義 被const修飾的東西都要受到強制的保護,可以預防意外的變動,能提高程式的健壯性 二 const和 define有啥不同的呢?我們知道const定義的是常量,define也可以定...
關於linphone,arm的一些事
移植好linphone之後就先用linphonec除錯,看下有什麼錯誤資訊。這個鏈結事是關於inphonec命令的 好像翻00牆才能進哦,我現在不能翻牆,昨晚開啟的 太多,這個 是否是我說的那個其實也不是很確定,總之你進去就知道了2333 之前進了乙個q群,蠻不錯的,不過記得裡面的命令大全也是不全的...
關於面試的一些事
2015年7月13日 知識點 鍊錶,malloc與free,socket,多工 這次面試安排的是下午1 30,我到了之後首先讓我做了乙份筆試題,一共三道知識題 一道思維題,先把這幾套題目大概說一下 1.有n個人,每個人有乙個id,從1到n對應的id為 1號,2號,3號,n號。讓他們從1開始報數,報到...