任何人都可以在没有密钥的情况下解码JSON Web令牌(JWT)吗?

时间:2015-05-28 21:53:38

标签: c# jwt

我是这个领域的新手,但我试图使用JWT nuget package生成JWT。

我的理解是你提供了一个秘密密钥来签署令牌,但是当我拿到令牌时,我去了JWT website进行测试,网站能够在没有我提供密钥的情况下对其进行解码。

我认为您生成令牌然后签名,从而阻止任何人知道令牌的内容,除非他们有该密钥。情况不是这样吗?

1 个答案:

答案 0 :(得分:6)

JSON Web令牌是数据结构的编码表示。这种编码数据不需要加密,但这样做是可以接受的。

从代码签名的定义:

  

Code signing是对可执行文件和脚本进行数字签名以确认软件作者的过程,并保证代码在使用cryptographic hash签名后未被更改或损坏。

已加密的JWT通常会有两个哈希值,第一个用于解密数据,第二个用于验证代码签名。解码未加密的JWT是标准化过程,即使未验证代码符号也可以完成。但是,如果代码签名哈希不匹配,建议不要在JWT中使用任何数据,因为这表明数据可能已被篡改。

并非所有JWT实施都支持加密;值得注意的是,Microsoft的JWT实现中没有加密支持。 https://stackoverflow.com/a/18224381/2495283。因此,如果您有必须确保保密的数据,则应使用JWE加密数据。 JWT标准文档显示an example of this process。首先对数据进行加密,然后将加密的字符串和解码算法作为JWT的有效载荷发送。