据我所知,关于JWT的安全性,如果JWT令牌不包含敏感信息,我们将仅使用其签名功能,以便无法操纵其内容。否则,如果它包含敏感数据,则可以对其进行加密以防止数据被嗅探。此外,如果需要,也可以同时使用它们。
但是,我不明白的是,为什么令牌不是纯json?为什么在可以轻松解码的同时对其进行编码?是出于安全原因,还是背后有其他原因?
我在网上搜索了一下,也快速浏览了RFC 7519,但找不到清晰,令人信服的答案。
答案 0 :(得分:2)
主要是为了简化JWT的处理。
JWT表示为由句点('
.
')分隔的URL安全部分的序列。每个部分都包含一个以base64url编码的值。
这可以确保a)整个令牌都是URL安全的,从而简化了在 web 上下文中最常用的技术的工作; b)易于处理“零件”,因为保证零件分隔符('.
')不会出现在零件本身内。如果它是纯JSON,则句点可能在编码值本身内的任何地方,并且您需要应用更复杂的JSON感知解析来查找单独的部分。但是,由于保证了部分不会由于base64url编码而包含句点,因此解析算法很简单:
验证JWT至少包含一个句点('
.
')字符。让已编码的JOSE标头成为JWT第一个句点('
.
')字符之前的部分。Base64url遵循没有使用换行符,空格或其他附加字符的限制,对已编码的JOSE标头进行解码。
...
(所有摘录自the RFC。)