为什么 JWT 使用 Base64url 编码而不是 Percent-encoding(也称为 URL 编码)

问题描述 投票:0回答:1

我最近阅读了JWT规范,发现它提倡使用Base64url来编码JWT属性。但是,我不确定为什么选择 Base64url 而不是 Percent-Encoding,特别是当后者在多种编程语言(如 PHPJavaScript.NET)中具有本机支持时。

难道是我对这两种编码方式的具体用途理解错误?

encoding jwt base64 urlencode
1个回答
0
投票

当您需要对 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 为基数的位置

  1. 将 + 替换为 -.(连字符)
  2. 将 / 替换为 _。 (下划线)
  3. 省略任何尾随填充(= 字符)。

正如您所看到的,base64 具有空间效率,因为这些 json 数据作为字符串传输,所以字符串的长度越短越好。

© www.soinside.com 2019 - 2024. All rights reserved.