在JWT令牌中,我们在头部发送用于签名JWT的算法类型,该类型只是base64编码。任何人都可以轻松了解该算法。例如:
为什么我们要将它发送给客户端,而客户端并不需要知道它。不发送算法会更安全吗?
{ "alg":"HS256" }
为什么我们要将它发送给客户端,而客户端并不需要知道它。不发送算法会更安全吗?
{ "alg":"HS256" }
HS256
是一种签名算法,因此客户端(如您所描述的)可以在没有验证签名的情况下读取令牌的内容(除非内容被单独加密)。none
签名算法选项,如果接收者只使用JWT标头中的信息,则允许令牌的发送者完全绕过验证(有关更多信息,请参见此文章)。这也详细说明了由于弱类型签名密钥而导致的另一个漏洞。alg
头是由客户端提供的,这意味着即使它是有效的,也可以用来欺骗实现进入失败模式。在JWT标准化后不久,就利用允许客户端指示算法选择的漏洞,发生了两个关键漏洞。