为什么 JWT 中使用 Base64?

问题描述 投票:0回答:3

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

json authentication jwt token session-cookies
3个回答
20
投票

JSON Web Token(JWT)是一种开放标准,定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。

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

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

  • JSON Web 加密(JWE):它们的有效负载是加密的,因此其他方的声明是隐藏

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

JWT 使用 Base64url,与 Base64 略有不同。

使用 Base64 的可能原因之一:它是一种非常流行的编码格式,并且在大多数编程语言中使用它都非常容易。此外,Base64url 是 URL 安全,因此令牌可以 在 URL 中发送。

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

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


6
投票

你是对的,base 64 很容易解码,但是基于 64 编码的 2 个部分(标头和有效负载)并不意味着被隐藏。

只是一般性介绍,JWT 令牌由 3 个部分组成。 1.标题(算法) 2.有效负载(用户数据) 3. 签名

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

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

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


0
投票

如果有人想在终端中使用base64url编码。

只需执行以下操作即可:

echo -n 'string' | base64 | tr '/+' '_-' | tr -d '='
© www.soinside.com 2019 - 2024. All rights reserved.