Json Web Token (JWT) - 可以用来保证HTTP正文的完整性吗?



互联网上有很多关于JsonWebTokens的信息,但没有很多关于使用它来签署HTTP消息内容的信息。

因此,它可以签署自己的声明,但我不清楚是否有一种标准方法(和可用的实现(让它携带消息正文的签名(至少,HTTP标头下方的任何内容(。

这是至关重要的,因为如果另一个客户端窃取了令牌本身,它可以用来制作非合法的请求,直到它过期。

这是到目前为止我找到的关于该主题的唯一资源:使用 JSON Web 令牌 (JWT( 的 API 消息完整性。标题很有希望,但这篇文章并没有真正说明如何做到这一点,它只是表明了这样做的兴趣。

顺便说一下,作为一个加号,如果可以对正文的内容进行签名,那么签名验证的快速失败实现会很棒,例如分段实现(例如,如果它立即识别出前 10kB 已被篡改,则丢弃消息,而不必摄取整个 10MB 消息(。

更多详情

我知道 JWT 是一个令牌,所以常见的用法是让授权方将令牌传递给客户端,然后客户端会在请求中透明地将其转发到服务器。因此,身份验证方不知道客户端接下来会做什么实际请求,并且无法签署此类请求的内容(这也是不切实际的,应该为每个请求颁发不同的"令牌"(。 它只是将令牌提供给客户端,该令牌将由客户端原封不动地附加到每个请求。

但我认为在某些情况下,在现实世界中,JWT 也是由客户端本身(而不是第三方(生成的,这意味着客户端知道共享密钥,并合法地为自己签署请求。
在这种情况下,客户端原则上可以对 http 正文的内容进行签名,而不仅仅是 JWT 令牌的内容。
总而言之,我怀疑 JWT 格式不适合这种签名。客户端和服务器应定义自己的协议/格式来执行此操作。

免责声明:我绝不是安全专家。

JWT 的工作不是签署请求正文的内容,而是向接收服务提供有关 JWT 来源及其包含的声明的可验证信息。 因此,当您的服务收到 JWT 时,您可以验证它的部分或全部重要方面:

  • 公钥(如果非对称签名(
  • 发行
  • 观众
  • 呼气

等等。

至于如何确保请求的内容是它声称的,这就是TLS-传输层安全性的工作。 TLS 握手过程是发送服务器和接收服务器基本上相互了解,验证每个服务器是否可信,并生成自己的非对称密钥集(每个会话!(来加密它们之间的流量。

因此,TLS的目的是确保一个受信任源发送的数据完好无损(并加密(到达另一个可以解密的受信任源。 虽然不完全是你问的机制,但我相信它符合目标。

最新更新