编码 JWT 的原因是啥?

Posted

技术标签:

【中文标题】编码 JWT 的原因是啥?【英文标题】:What is the reason for encoding JWT?编码 JWT 的原因是什么? 【发布时间】:2019-07-27 21:15:09 【问题描述】:

据我所知,关于 JWT 的安全性,如果 JWT 令牌不包含敏感信息,我们只使用其签名功能,使其内容无法被操纵。否则,如果它包含敏感数据,则可以对其进行加密以防止数据被嗅探。此外,如果需要,两者都可以使用。 但是,我无法理解的是为什么令牌不是普通的 json?为什么它可以被编码,而它可以很容易地解码?是出于安全原因还是背后有其他原因? 我在网上搜了一下,也快速浏览了RFC 7519,但没有找到任何明确而令人信服的答案。

【问题讨论】:

【参考方案1】:

主要是为了简化 JWT 的处理。

JWT 表示为一系列 URL 安全部分,由句点 ('.') 字符分隔。每个部分都包含一个 base64url 编码的值。

这确保了 a) 整个令牌是 URL 安全的,这简化了主要用于 web 上下文的技术; b) 使处理“零件”变得容易,因为零件分隔符 ('.') 保证不会出现在零件本身内部。如果它是纯 JSON,则句点可能位于编码值本身的任何位置,您需要应用更复杂的 JSON 感知解析来查找单独的部分。但是由于是base64url编码,保证部分不能包含句点,解析算法很简单:

    验证 JWT 是否包含至少一个句点 ('.') 字符。

    让 Encoded JOSE Header 成为 JWT 在第一个句点 ('.') 字符之前的部分。

    Base64url 在未使用换行符、空格或其他附加字符的限制后对编码的 JOSE 标头进行解码。

...

(所有摘自the RFC。)

【讨论】:

以上是关于编码 JWT 的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

编码的 UI 测试:创建多个单独的 UIMap 类而不只是多个部分 UIMap 类的原因是啥?

JWT 刷新令牌的全部意义是啥?

在 Redis 中存储 JWT 令牌的标准做法是啥?

海康网络摄像机ipping是啥原因

java文件从Windows里拖到Vmware的CentOS系统里中文乱码,如图。是啥原因?如何解决?

sublime text 显示unregistered是啥原因