JWT如何防止 Token 被篡改?


  例子:token = SlwJwt.createToken(TokenUtil.header, secretKey.getBytes(), payload);

JSON Web令牌以緊湊的形式由三部分組成,這些部分由點(.)分隔,分別是:頭(Header)、有效載荷(Playload)、簽名(Signature);

Header:對TokenUtil.header(含有加密算法)進行Base64Url編碼得到jwt的第一部分;

Playload:存放有效信息的地方,Base64Url編碼得到第二部分;

Signature:是整個數據的認證信息。一般根據前兩步的數據,然后通過header中聲明的加密方式進行加鹽secret組合加密,然后就構成了jwt的第3部分

  此時 signature字段就是關鍵了,能被解密出明文的,只有header和payload

假如黑客/中間人串改了payload,那么服務器可以通過signature去驗證是否被篡改過

在服務端在執行一次 signature = 加密算法(header + “.” + payload, 密鑰);, 然后對比 signature 是否一致,如果一致則說明沒有被篡改。

  所以為什么說服務器的密鑰,也就是例子中的secretKey.getBytes()不能被泄漏。只要密鑰不被泄露,Signature無法正確,所以就會被服務器識別出來偽造信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM