例子: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無法正確,所以就會被服務器識別出來偽造信息。