gpt4 book ai didi

jwt - 为什么 JWT 被分成三个点分隔的部分?

转载 作者:行者123 更新时间:2023-12-01 11:12:30 28 4
gpt4 key购买 nike

一个 JSON Web token (JWT) 被分成三个 Base-64 编码的部分,这些部分由句点 (“.”) 连接起来。前两部分对 JSON 对象进行编码,第一部分是详细说明签名和散列算法的 header ,第二部分包含断言。第三个是二进制数据,即签名本身。

我的问题是:为什么 JSON Web Token 像这样分成三个独立的部分? 似乎将它们编码为单个 JSON 对象会使解析它们变得更容易,就像这样(为了简洁起见,下面的示例不完整):

{
"header": {
"alg": "rsa"
},
"assertions": {
"iss": "2019-10-09T12:34:56Z"
},
"sig": "qoewrhgoqiethgio3n5h325ijh3=="
}

换种说法: 为什么 JWT 的设计者不直接将 JWT 的所有部分放在一个 JSON 对象中,如上所示?

最佳答案

恕我直言,这会带来更多问题。是的,您可以很好地解析它,但是签名验证呢?

JWT 的结构是 <B64 String>.<B64 String>.<B64 String> .签名基本上是签名的前两个部分。该结构不太可能被各种框架以任何方式修改。

现在考虑 JSON:在序列化和反序列化期间,元素的顺序可能会改变。对象 {"a":1,"b":2}{"b":2,"a":1}在 javascript 中可能相等,但如果您将它们字符串化,它们将生成不同的签名。

此外,要检查签名,您需要决定用于生成签名的标准 JSON 形式(例如,美化或缩小)。同样,不同的选择会产生不同的签名。

因此,简单地使用 JSON 带来的麻烦多于好处

关于jwt - 为什么 JWT 被分成三个点分隔的部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58324325/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com