为什么在JWT中使用Base64

时间:2019-10-11 13:01:27

标签: json authentication jwt token session-cookies

我试图了解JSON Web令牌,并了解到Base64是其中使用的编码。由于base64可以轻松解码,因此我的问题是为什么要使用它们。为什么不使用单向哈希函数生成令牌?

如果这个问题很愚蠢,请饶恕我

2 个答案:

答案 0 :(得分:1)

您是正确的,base 64易于解码,但是基于64编码的2个部分(Header和Payload)并不是要隐藏。

仅作一般性介绍,JWT令牌由3个部分nl组成。 1.Header(算法) 2.有效载荷(用户数据) 3.签名

标头和有效负载包含非敏感数据,但是此数据提供了足够的信息来帮助您识别向您提供令牌的用户。因此,为了使您能够授予他刷新令牌或允许他访问某些资源,您需要了解有关他的一些信息,而用户不必在每次通话时都提供他的凭据。

是的,它很容易解码,但这就是签名的3部分。签名采用标头,有效负载的base64对值进行编码,并使用一些秘密密钥对其进行哈希处理。这样做的目的是,当密钥从客户端进入您的后端时,我们可以首先检查负载(可能包含权限)是否已被更改或更改,如果它们的令牌哈希值不是一样了。

有关更多信息,请检查以下资源: https://jwt.io/(查看结构) https://jwt.io/introduction/(常规信息)

答案 1 :(得分:1)

JSON Web Token(JWT)是一个开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。

实际上,JWT是以下令牌类型的通用名称

  • JSON Web Signature(JWS):有效载荷经过了编码和签名,因此可以验证声明的完整性

    < / li>
  • JSON Web Encryption(JWE):它们的有效载荷是加密的,因此声明被其他方隐藏

  

由于base64可以轻松解码,所以我的问题是为什么要使用它们。

好吧,这可能是使用Base64的原因之一:这是一种非常受欢迎的编码格式,并且在大多数编程语言中都非常容易使用。另外,Base64是 URL安全的,因此令牌could会在URL中发送。

  

为什么不使用单向哈希函数生成令牌?

它违反了签名的JWT的目的,因为接收者将无法解析令牌的内容。