Validation參數校驗

這裏是修真院後端小課堂,每篇分享文從前端

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】java

八個方面深度解析後端知識/技能,本篇分享的是:程序員

【Validation參數校驗】算法

【修真院Java小課堂】Validation參數校驗後端

你們好,我是IT修真院北京分院第35期的學員趙君釗,一枚正直純潔善良的Java程序員,今天給你們分享一下,修真院官網Java(職業)任務二,深度思考中的知識點——Validation參數校驗安全

 

 

  1. 背景介紹

身份驗證服務器

服務端提供資源給客戶端,可是某些資源是有條件的。因此服務端要可以識別請求者的身份,而後再判斷所請求的資源是否能夠給請求者。ide

tokenui

token是一種身份驗證的機制,初始時用戶提交帳號數據給服務端,服務端採用必定的策略生成一個字符串(token),token字符串中包含了少許的用戶信息,而且有必定的期限。服務端會把token字符串傳給客戶端,客戶端保存token字符串,並在接下來的請求中帶上這個字符串。編碼

通常狀況下,建議放入token的數據是不敏感的數據,這樣只要服務端使用私鑰對數據生成簽名,而後和數據拼接起來,做爲token的一部分便可。 客戶端的每一次請求,都必須攜帶token,攔截器會對敏感資源的訪問進行攔截,而後解析token,解析不成功,表示token不匹配。解析成功以後,判斷token是否已過時,若是是,拒絕服務。全部都驗證成功的狀況下,攔截器放行。     

  1. 知識剖析

JWT 

JSON Web Token(JWT)是一個很是輕巧的規範。這個規範容許咱們使用JWT在用戶和服務器之間傳遞安全可靠的信息。它由三部分組成,頭部、載荷與簽名。

頭部(Header) 

頭部包含了兩部分,token 類型和採用的加密算法 { "alg": "HS256", "typ": "JWT" } 它會使用 Base64 編碼組成 JWT 結構的第一部分

載荷(Payload) 

這部分就是存放信息的地方,能夠把用戶 ID 等用於驗證用戶身份的信息放在這裏,JWT 規範裏面對這部分有進行了比較詳細的介紹,經常使用的由 iss(簽發者),exp(過時時間),sub(面向的用戶),aud(接收方),iat(簽發時間),這五個字段都是由JWT的標準所定義的。

簽名(Signature) 

前面兩部分都是使用 Base64 進行編碼的,即前端能夠解開知道里面的信息。Signature 須要使用編碼後的 header 和 payload 以及咱們提供的一個密鑰,而後使用 header 中指定的簽名算法進行簽名。簽名的做用是保證 JWT 沒有被篡改過。

3.常見問題

4.解決方案

5.編碼實戰

6.擴展思考

JJWT

jjwt 是 java 對 JWT 的封裝,它有兩個重要的方法,bulider和parser分別用來建立和解析JWT

DefaultJwtBulider是JwtBuilder接口的實現類,用來建立jwt,這個實現類中的方法用來設置JWT中的一些字段

DefaultJwtParser類用來解析jwt字符,傳入簽名密鑰和要解析jwt字符串,jwt在解析的時候會自動校驗jwt的有效性,根據狀況會拋出三個異常,到期時間異常、jwt格式異常、簽名異常,能夠經過捕獲這幾個異常來進行更具體的校驗。

7.參考文獻

參考資料:http://blog.leapoahead.com/20...

————JSON Web Token - 在Web應用間安全地傳遞信息

8.更多討論

 

 

暴露信息的問題?

在JWT中,不該該在載荷裏面加入任何敏感的數據。通常須要傳入用戶的User ID。這個值實際上不是什麼敏感內容,通常狀況下被知道也是安全的。 可是像密碼這樣的內容就不能被放在JWT中了。若是將用戶的密碼放在了JWT中,那麼經過Base64解碼就能很快地知道你的密碼了。

 

僞造JWT冒充身份進行登陸?

服務端在生成token時,使用了客戶端的UA做爲干擾碼對數據加密,客戶端進行請求時,會同時傳入token、UA,服務端使用UA對token解密,從而驗證用戶的身份。若是隻是把token拷貝到另外一個客戶端使用,不一樣的UA會致使在服務端解析token失敗,從而實現了必定程度的防冒充。可是攻擊者若是猜到服務端使用UA做爲加密鑰,他能夠修改本身的UA。

 

JWT缺點?

麻煩,並且全部的數據都被放到 JWT 裏,數據大小很快就會超過 Cookie 的容量限制。

JWT 不支持撤銷。無論發生什麼,JWT 會持續有效,直到過時時間,沒法徹底掌控其有效期。

JWT 一旦被生成,就不會再和服務端有任何瓜葛。一旦服務端中的相關數據更新,無狀態 JWT 中存儲的數據因爲得不到更新,就變成了過時的數據。

9.鳴謝

感謝觀看,若有出錯,懇請指正

10.結束語

今天的分享就到這裏啦,歡迎你們點贊、轉發、留言、拍磚~

相關文章
相關標籤/搜索