我最近阅读了JWT规范,发现它提倡使用Base64url来编码JWT属性。但是,我不确定为什么选择 Base64url 而不是 Percent-Encoding,特别是当后者在多种编程语言(如 PHP、JavaScript 和 .NET)中具有本机支持时。
难道是我对这两种编码方式的具体用途理解错误?
当您需要对 URL 中直接包含不安全的字符(例如空格、特殊字符或非 ASCII 字符)进行编码时,需要使用百分比编码。
Base64url 编码设计用于编码二进制数据或需要紧凑表示的数据,它用 URL 安全的替代字符替换对 URL 不安全的字符,并省略填充,从而更加节省空间。
Base64url 编码通常用于 JWT 等上下文,其中二进制数据(例如加密签名)或结构化数据(例如令牌中的声明)需要表示为字符串并以 URL 或其他数据交换格式传递。 考虑您需要发送的对象
{
"name": "John Doe",
"email": "[email protected]",
"age": 30
}
在url编码/百分比编码中
%7B%22name%22%3A%20%22John%20Doe%22%2C%20%22email%22%3A%20%22john%40example.com%22%2C%20%22age%22%3A%2030%7D
在base64中
eyJnameY2FemailmAGEzMjB9
以 64 为基数的位置
正如您所看到的,base64 具有空间效率,因为这些 json 数据作为字符串传输,所以字符串的长度越短越好。