【问题标题】:Json Web Token (JWT) - can be used to guarantee the integrity of the HTTP body?Json Web Token (JWT) - 可用于保证 HTTP 正文的完整性?
【发布时间】:2019-10-11 11:23:19
【问题描述】:

互联网上有很多关于 JsonWebTokens 的信息,但关于使用它对 HTTP 消息的内容进行签名的信息并不多。

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

这是最重要的,因为如果另一个客户端自己窃取了令牌,它可能会被用来制作非法请求,直到它过期。

这是迄今为止我找到的关于该主题的唯一资源:API Message Integrity With JSON Web Token (JWT)。标题很有希望,但文章并没有真正说明如何去做,只是表明了这样做的兴趣。

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

更多详情

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

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

【问题讨论】:

  • 验证小数据的完整性确实有意义,但对于大数据,我认为这将是很多开销。另外我不知道是否存在任何标准方法或库来执行此操作,您必须从头开始烹饪。
  • 可能Block cipher 可以减少繁重,因为我认为它们具有固定的内存占用,与请求的大小无关。我认为许多 HMAC 实现都使用分组密码作为密码函数。这将是一个 CPU 密集型操作,可能不是那么密集。

标签: security microservices sign tampering


【解决方案1】:

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

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

  • 非对称签名的公钥
  • 发行人
  • 观众
  • 过期

等等。

至于如何确保请求的内容与其声称的一致,这是 TLS - transport layer security 的工作。 TLS handshake process 是发送和接收服务器本质上相互了解的地方,验证每个服务器是否可信,并生成自己的非对称密钥集(每个会话!)以加密它们之间的流量。

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

【讨论】:

  • 确实可以在Client-authenticated TLS handshake中使用TLS,但在JWT中我想客户端身份只是在令牌的sub字段中声明,并且TLS通常用于确保服务器的身份。我理所当然地认为授权方通过 TLS 将令牌传递给客户端(因此它不能被恶意方嗅探),但是如果有人可以以某种方式读取令牌,它可以向服务器发送请求,而服务器则没有表示检测欺骗攻击。
  • 顺便说一下你的链接What Happens in a TLS Handshake? | SSL Handshake实际上描述了TLS最常见的场景,它只证明服务器的身份,而不是客户端的:“身份验证:客户端验证服务器的SSL证书与颁发它的证书颁发机构。这确认了服务器就是它所说的那个人,并且客户端正在与域的实际所有者进行交互。” 尽管 TLS 可用于验证客户端的身份,我想它不太常见。
  • 我想我误读了您的问题,因为它更多地是关于保护消息的内容不被篡改,而不是关于如何验证客户是他们声称的具体身份。我知道可以向用户颁发单独的 X.509 证书(例如)以“验证”他们的身份,但即使这样也留下了许多被利用的机会。
猜你喜欢
  • 2016-03-20
  • 1970-01-01
  • 2016-04-07
  • 2020-05-11
  • 2020-12-21
  • 2015-02-24
  • 2014-07-11
  • 2023-04-05
  • 2019-09-23
相关资源
最近更新 更多