我知道JWT令牌包含一个BASE64编码的头段。
场景:
- 解码标头
- 更改标头中某个参数的值,例如
kid
参数 - 对修改后的标头进行编码
- 将JWT令牌中的初始编码标头替换为新的编码标头
问题
- 令牌是否仍然有效
- 或者,当最初对其进行签名时,在创建签名时也会考虑标头,因此,如果之后修改标头,则令牌被视为无效
对于签名令牌(JWS(,签名是使用有效载荷和标头计算的。如果更改了标头或有效负载,则签名部分将变为无效。
你可以试试https://jwt.io/
请注意,存在一种已知的攻击,包括将签名算法修改为none
,以及签名本身允许在没有警告易受攻击库的情况下修改有效负载。有关详细信息,请参阅本文。
是。如果要从现有令牌进行修改,可以尝试此网站:https://token.dev/
除非拥有密钥,否则无法更改标头/有效负载。如果他/她拥有密钥,他们可以更改JWT令牌。
例如,如果使用nestjs注册JwtModule,则必须从配置文件中读取密钥,以避免泄露密钥。如下
JwtModule.register({
secret: 'read this from config file',
signOptions: {
expiresIn: 60 * 1000
}
}),
有关更多信息,您可以观看此视频