You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JWS签名如何确保令牌来自合法发送方?中间人攻击场景疑问

问题核心与解答

你的困惑本质是JWS的使用流程缺失了信任锚,而非JWS本身的防篡改特性失效,下面逐一拆解:

1. 先明确JWS的核心作用

JWS的防篡改特性是指:令牌的 payload(负载)和 header(头部)一旦被篡改,签名验证必然失败。但它本身不负责“证明发送者是合法实体”——身份验证需要额外的信任机制配合,你当前的流程正好跳过了这一步。

2. 攻击场景成立的原因

你现在的流程是“接收方完全依赖令牌里的公钥URL获取公钥并验证”,相当于没有任何预先的信任规则:只要对方给的是一个签名合法的JWS,你就默认信任发送者。这种情况下,中间人用自己的密钥对生成合法JWS,自然能通过签名验证——但这不是JWS的问题,是你没有对“谁能签发合法令牌”做限制。

3. 正确的解决思路

要避免这种攻击,必须给接收方设置预先的信任锚,常见方案有三种:

  • 预存合法公钥:接收方预先配置所有合法发送者的公钥(比如服务器预存客户端公钥,客户端预存服务器公钥),验证签名时直接用预存的公钥,而非从令牌里获取。这样中间人用自己的密钥生成的JWS,会因为公钥不匹配而验证失败。
  • 验证公钥的合法性:如果必须从令牌的公钥URL获取公钥,那这个公钥必须由预先信任的CA(证书颁发机构)签发。接收方拿到公钥后,要先验证公钥的证书链是否完整、是否由信任的CA签发、是否属于预设的合法实体(比如域名匹配),确保公钥不是攻击者的。
  • 校验JWS的标准字段:利用JWS标准里的iss(签发者)和aud(受众)字段,接收方验证时必须检查这两个字段是否符合预期。比如服务器只接受iss为指定合法客户端ID的令牌,即使中间人生成了合法JWS,只要iss字段不对,就直接拒绝。

4. 总结

JWS的核心价值是保证令牌内容的完整性和不可否认性,身份验证需要结合信任锚和标准字段校验来实现。你之前的流程因为缺少信任锚,才给了中间人可乘之机,调整流程补充信任机制即可解决问题。

内容的提问来源于stack exchange,提问作者Sukhpal Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:43:29