我和我的專案之Security整合JWT

2021-10-22 14:12:38 字數 2497 閱讀 6554

對security做了初步的介紹。了解其大致執行原理。歸結起來可以用下面這張圖進行概括。

但落地到實際專案中還是存在著不少缺陷。例如token安全問題。

token 是一串字串,通常因為作為鑑權憑據,最常用的使用場景是api鑑權。

1.cookie + session

和平常 web 登陸一樣的鑑權方式,很常見。

將賬號和密碼拼接然後base64 編碼加到 header 頭中。很顯然,因為賬號和密碼幾乎是『明文』傳輸的,而且每次請求都傳,安全性可想而知。

每次請求都要對賬號、密碼取一次摘要,也就是說每次請求都要有賬號和密碼,也就是說賬號和密碼要麼快取一下,要麼就每次請求要去使用者輸一次密碼,這樣顯然不合適。同樣,上面的 basic 也存在這樣的問題。

4.token

token 通過一次登入驗證,得到乙個鑑權字串,然後以後帶著這個鑑權字串進行後續操作,這樣就可以解決每次請求都要帶賬號密碼的問題,而且也不需要反覆使用賬號和密碼。

token 相對於 cookie + session 的優點,主要有下面兩個:

①csrf攻擊

這個原理不多做介紹,構成這個攻擊的原因,就在於cookie + session 的鑑權方式中,鑑權資料(cookie 中的 session_id)是由瀏覽器自動攜帶傳送到服務端的,借助這個特性,攻擊者就可以通過讓使用者誤點攻擊鏈結,達到攻擊效果。而token是通過客戶端本身邏輯作為動態引數加到請求中的,token 也不會輕易洩露出去,因此token在csrf 防禦方面存在天然優勢。

②適合移動應用

移動端上不支援cookie,而token只要客戶端能夠進行儲存就能夠使用,因此token在移動端上也具有優勢。

【token的種類】

自定義的token:開發者根據業務邏輯自定義的token

jwt:json web token,定義在 rfc 7519 中的一種token規範

oauth2.0:定義在 rfc 6750 中的一種授權規範,但這其實並不是一種 token,只是其中也有用到 token

jwt 全稱json web tokens,是一種規範化的 token。可以理解為對 token 這一技術提出一套規範,是在 rfc 7519 中提出的。

乙個 jwt token 是乙個字串,它由三部分組成,頭部、載荷與簽名,中間用 . 分隔。

頭部通常由兩部分組成:令牌的型別(即 jwt)和正在使用的簽名演算法(如 hmac sha256 或 rsa.)

載荷中放置了token 的一些基本資訊,以幫助接受它的伺服器來理解這個 token。同時還可以包含一些自定義的資訊,使用者資訊交換。

載荷的屬性也分三類:

預定義(registered)

公有(public)

私有(private)

簽名時需要用到前面編碼過的兩個字串,如果以 hmacsha256 加密,就如下:

hmacsha256(

base64urlencode(header) + "." +

base64urlencode(payload),

secret

)

加密後再進行 base64url 編碼。最後得到的字串就是 token 的第三部分 zzzzz。

組合便可以得到 token:***xx.yyyyy.zzzzz

簽名的作用:保證 jwt 沒有被篡改過:

hmac 演算法是不可逆演算法,類似 md5 和 hash ,但多乙個金鑰,金鑰(即上面的 secret)由服務端持有,客戶端把 token 發給服務端後,服務端可以把其中的頭部和載荷再加上事先共享的 secret 再進行一次 hmac 加密,得到的結果和 token 的第三段進行對比,如果一樣則表明資料沒有被篡改。

jwt 的使用有兩種方式:

加到 url 中:?token=你的token

加到 header 中,建議用這種,因為在 https 情況下更安全:authorization:bearer 你的token

具體專案可以git [email protected]:lth1024/security.git拆箱即用。

我和我的父親

1我的父親不會說什麼豪言壯語,是個實在人,2父親在我的成長歷程中,有非常重要的作用,正是因為他,我在沿著很好的方向發展,在我的高考由於我的分數不錯,而沒有很好地如原 原因我知道 父親說,兒子就像是一條魚,游到哪算哪,我聽了心酸,真的,我覺得我對不起我的父親,3我的父親在經濟方面對我很放心,他以前也是...

我和我的Android

雖然android已經發布很久了,而且現在android的版本已經是4.1 android 4.1,jelly bean 了,但是一直沒去買部android的手機用,原因是本來用的用的是nokia的手機,一直沒有壞 而且覺得android手機也不一定用的住,因為螢幕比較大,不抗跌,也不一定抗用,遠遠...

我和我的智慧型車

2017年11月開始了我的智慧型車之旅,這一做就做了三年的智慧型車。從十三屆到十五屆,談談我對智慧型車的認知和理解。初到大學的我也和很多同學,對大學充滿了好奇。總想去感受一下別人眼中的大學是怎麼樣的,至此我也開始了我的大學生活。接下來就是最忙碌的大一生活了,因為我也像大家一樣加入了很多社團,在這忙碌...