如果没有它可以解密,那么签署jwt有啥意义

Posted

技术标签:

【中文标题】如果没有它可以解密,那么签署jwt有啥意义【英文标题】:What is the point of signing jwt if it can be decrypted without it如果没有它可以解密,那么签署jwt有什么意义 【发布时间】:2014-09-05 15:19:36 【问题描述】:

我正在试验jwt,在做一些研究时我发现了这个JWT DECODER,我想我必须输入令牌和我的密钥才能解密令牌。

但我很惊讶地看到它只需要令牌来解密它。如果没有它可以解密,那么密钥有什么用。令牌中的所有用户数据将对任何人开放。

我在这里错过了什么吗??

我的另一个问题是 jwt 如何帮助防止MITM

谢谢

【问题讨论】:

签名不是加密。签名允许您验证负载的作者,但不会阻止负载被检查,您可以在没有访问作者私钥的情况下执行此操作。 任何拥有 JWS(签名的 JWT)的人都可以看到该内容,但是如果您使用密钥验证令牌的有效性,则可以确保该内容没有被更改,或者您拒绝它。这些令牌是为非敏感数据制作的。如果要对内容进行加密,可以使用JWE,但是使用起来比较复杂。 【参考方案1】:

令牌经过签名和编码(未加密),因此无需密钥即可导出原始数据。 signature 允许任何拥有公钥的人验证令牌,但签名本身只能由持有私钥的实体生成。

由于这些属性,可以检测到数据的任何更改,并且我们可以可靠地确定是谁发布了令牌。这会阻止 MITM 类型,因为 MITM 无权访问私钥,因此无法为将通过验证的令牌生成签名。

【讨论】:

以上是关于如果没有它可以解密,那么签署jwt有啥意义的主要内容,如果未能解决你的问题,请参考以下文章

RX Observables - 如果我不能改变价值,那么“随着时间的推移”有啥意义?

如果 package-lock.json 锁定它,那么在 package.json 中声明“兼容版本”(^version)有啥意义?

如果您可以通过反射访问它们,那么拥有私有构造函数有啥意义?

JWT 刷新令牌必须有啥声明?它可以与访问令牌相同(具有更长的exp)吗?

JWT 有啥保障?

如果可以对源代码进行逆向工程,那么在 Android(或 Java)中加密任何东西有啥意义?