编码 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 类的原因是啥?