编码JWT的原因是什么?

时间:2019-03-06 09:01:44

标签: encoding base64 jwt

据我所知,关于JWT的安全性,如果JWT令牌不包含敏感信息,我们将仅使用其签名功能,以便无法操纵其内容。否则,如果它包含敏感数据,则可以对其进行加密以防止数据被嗅探。此外,如果需要,也可以同时使用它们。
但是,我不明白的是,为什么令牌不是纯json?为什么在可以轻松解码的同时对其进行编码?是出于安全原因,还是背后有其他原因?
我在网上搜索了一下,也快速浏览了RFC 7519,但找不到清晰,令人信服的答案。

1 个答案:

答案 0 :(得分:2)

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

  

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

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

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

  2.   
  3. 让已编码的JOSE标头成为JWT第一个句点('.')字符之前的部分。

  4.   
  5. Base64url遵循没有使用换行符,空格或其他附加字符的限制,对已编码的JOSE标头进行解码。

  6.   
     

...

(所有摘录自the RFC。)