參考:
jwt乙個開放標準(rfc 7519)
1、jwt-json web token兩個特點:
頭部包含了兩部分,token 型別和採用的加密演算法
這部分就是我們存放資訊的地方了,你可以把使用者 id 等資訊放在這裡,jwt 規範裡面對這部分有進行了比較詳細的介紹,常用的由 iss(簽發者),exp(過期時間),sub(面向的使用者),aud(接收方),iat(簽發時間)
前面兩部分都是使用 base64 進行編碼的,即前端可以解開知道裡面的資訊。signature 需要使用編碼後的 header 和 payload 以及我們提供的乙個金鑰(伺服器端提供,客戶端不知道),然後使用 header 中指定的簽名演算法(hs256)進行簽名。簽名的作用是保證 jwt 沒有被篡改過。
注:簽名的目的
最後一步簽名的過程,實際上是對頭部以及負載內容進行簽名,防止內容被竄改。如果有人對頭部以及負載的內容解碼之後進行修改,再進行編碼,最後加上之前的簽名組合形成新的jwt的話,那麼伺服器端會判斷出新的頭部和負載形成的簽名和jwt附帶上的簽名是不一樣的。如果要對新的頭部和負載進行簽名,在不知道伺服器加密時用的金鑰的話,得出來的簽名也是不一樣的。
3、jwt 使用
首先,前端通過web表單將自己的使用者名稱和密碼傳送到後端的介面。這一過程一般是乙個http
post請求。建議的方式是通過ssl加密的傳輸(https協議),從而避免敏感資訊被嗅探。
後端核對使用者名稱和密碼成功後,將使用者的id等其他資訊作為jwt
payload(負載),將其與頭部分別進行base64編碼拼接後簽名,形成乙個jwt。形成的jwt就是乙個形同lll.zzz.***的字串。
後端將jwt字串作為登入成功的返回結果返回給前端。前端可以將返回的結果儲存在localstorage或sessionstorage上,退出登入時前端刪除儲存的jwt即可。
前端在每次請求時將jwt放入http header中的authorization位。(解決xss和xsrf問題)
後端檢查是否存在,如存在驗證jwt的有效性。例如,檢查簽名是否正確;檢查token是否過期;檢查token的接收方是否是自己(可選)。
驗證通過後後端使用jwt中包含的使用者資訊進行其他邏輯操作,返回相應結果。 注:
xss攻擊全稱跨站指令碼攻擊
跨站請求偽造(csrf/xsrf)
JWT身份驗證
jwt頭 jwt頭部分是乙個描述jwt元資料的json物件,通常如下所示。有效載荷 有效載荷部分,是jwt的主體內容部分,也是乙個json物件,包含需要傳遞的資料。jwt指定七個預設字段供選擇。iss 發行人 exp 到期時間 sub 主題 aud 使用者 nbf 在此之前不可用 iat 發布時間 ...
簡單Web service 身份驗證解決方案
簡單web service 身份驗證解決方案 問題提出 為了構建乙個安全的web服務,需要對呼叫方進行身份驗證,只讓通過審核的使用者呼叫web服務。軟體件環境 web服務程式部署在分布於各地的工廠伺服器,這些伺服器位於內網之中,沒有固定外網ip,且不能通過外網進行訪問。呼叫這些web服務的是一台連線...
JWT跨域認證解決方案的理解
一 jwt概念 json web token 縮寫jwt 是目前最流行的跨域認證解決方案。二 跨域認證一般流程 使用者向伺服器傳送使用者名稱和密碼 伺服器驗證通過後,在當前對話 session 裡面儲存相關資料,比如使用者角色 登入時間等等 伺服器向使用者返回乙個session id,寫入使用者的c...