场景:
我正在此链接(https://medium.com/vandium-software/5-easy-steps-to-understanding-json-web-tokens-jwt-1164c0adfcec)上阅读有关 JSON Web 令牌的信息。它概述了如何创建 JSON Web 令牌、创建标头和有效负载,然后使用以下伪代码创建签名:
data = base64urlEncode( header ) + “.” + base64urlEncode( payload )
hashedData = hash( data, secret )
signature = base64urlEncode( hashedData )
我的问题:
为什么base64urlEncode
在创建data
and时使用伪代码signature
?
到目前为止我所了解的范围:
Base64 允许您使用 Base64 64 个文本字符集中的文本字符来表示二进制数据。这通常在您有一组数据要通过某个通道传递时使用,这些通道可能会误解某些字符,但不会误解 Base64 字符,因此您使用 Base64 对其进行编码,这样数据就不会被误解。另一方面,Base64 URL 编码类似于 Base64 编码,只是您只使用了 Base64 字符集的一个子集,该子集不包括 URL 中具有特殊含义的字符,因此如果您使用 Base64 URL 编码的字符串URL,其含义不会被误解。
假设我的理解是正确的,我试图理解为什么base64urlEncode()
在计算data
和signature
上面的伪代码中使用。JSON Web 令牌的签名会在 URL 中的某处使用吗?如果是这样,为什么data
base64urlEncode
d 在散列之前也是如此。为什么不直接对签名进行编码?哈希函数是否需要对其data
参数进行 Base64 URL 编码?