此时 signature字段就是关键了,能被解密出明文的,只有header和payload 假如黑客/中间人串改了payload,那么服务器可以通过signature去验证是否被篡改过。 在服务端在执行一次 signature = 加密算法(header + “.” + payload, 密钥);, 然后对比 signature 是否一致,如果一致则说明没有被篡改。 所以为什么说服务器的密钥不能被泄漏。 如果泄漏,将存在以下风险: 客户端可以自行签发 token 黑客/中间人可以肆意篡改 token
安全性相关
如果加强 JWT 的安全性? 根据我的使用,总结以下几点: 缩短 token 有效时间 使用安全系数高的加密算法 token 不要放在 Cookie 中,有 CSRF 风险 使用 HTTPS 加密协议 对标准字段 iss、sub、aud、nbf、exp 进行校验 使用成熟的开源库,不要手贱造轮子 特殊场景下可以把用户的 UA、IP 放进 payload 进行校验(不推荐)