没有任何 JS 访问令牌的 JWT 有效负载加密

Posted

技术标签:

【中文标题】没有任何 JS 访问令牌的 JWT 有效负载加密【英文标题】:JWT payload encryption without any JS access to token 【发布时间】:2020-05-31 11:57:50 【问题描述】:

我想使用对称或非对称加密方法等当前方法加密 JWT 有效负载。 我的问题是,如果我使用这些方法,javascript 需要在客户端对我的数据执行任何操作吗?还是加密和验证的所有部分都将在服务器端完成? 在这个article 中,他们说如果你需要加密有效负载,你必须存储公钥(由于像 RSA 或...这样的加密算法)。为什么? 如果我想加密有效负载,为什么我们需要将公钥(或任何密钥)存储在 jwt 令牌中? 有没有办法只在服务器端对称地加密有效负载?并且不需要 javascript 访问它们并操作令牌?

【问题讨论】:

【参考方案1】:

你误解了这篇文章

要为给定收件人加密 JWT,您需要知道他们的公共 RSA 密钥。

如果读起来可能会更清楚

要为给定收件人加密 JWT,以便他们可以解密它,您需要知道他们的公共 RSA 密钥。

这意味着如果客户端想要加密一些东西发送给可以解密,他们只需要知道你的公钥,你只需要知道你的私钥。如果你想加密客户端可以解密的东西,你需要客户端的公钥。

听起来您想加密某些内容以发送给客户端,然后他们可以将其发送回您以供您解密。由于您同时在加密和解密,因此不需要向客户端发送任何密钥(除非您使用不同的密钥每个客户端,在这种情况下,您需要向他们发送您使用的公钥,以便您可以找出用哪个私钥解密)。

【讨论】:

如果我们决定只使用像 AES 这样的对称算法加密有效负载,服务器可以使用只有服务器拥有该密钥的密钥加密有效负载,然后 jwt 向客户端发送令牌,现在令牌已加密有效负载,客户端获取令牌,然后发送回服务器。在这种情况下,任何主体都无法读取有效载荷数据并找到有效载荷中的内容。这是真的吗?? 正确。没有人(除了你的服务器) @Joe 整个对话都是关于加密的 JWT

以上是关于没有任何 JS 访问令牌的 JWT 有效负载加密的主要内容,如果未能解决你的问题,请参考以下文章

在每个API调用之前验证JWT令牌

加密 JWT 有效负载

生成访问令牌时如何将 userid 参数添加到 jwt 的有效负载?

解析 JWT 令牌以仅在 C# 或 Blazor 中没有外部库的情况下获取有效负载内容

提取过期 jwt 令牌的有效负载

ASP Net Identity JWT API 令牌的有效负载要求是啥