Agent 支付签名前,先限制授权有效期
文章解释 x402 在 EVM 上如何通过 EIP-3009 签名授权 USDC 转账,以及过长有效期带来的泄露风险。提供签名前执行的 Python 检查,帮助限制支付授权窗口。
原文暂未完整获取,基于公开信息的快读
Agent 用 x402 支付 API 费用时,签下的授权可能在请求结束后仍然有效。dev.to 的这篇文章讨论了 EVM 链上的 USDC 支付:授权一旦泄露,持有者可能在到期前提交结算。作者给出 Python 检查示例,把有效期、收款方和金额限制放到签名前。
目前能确认什么
按节选描述,x402 的 EVM exact scheme 使用 EIP-3009 transferWithAuthorization。Agent 通过 EIP-712 签署付款方、收款方、金额、起止时间和 nonce,再由服务端或 facilitator 提交链上结算。
授权当前有效,不代表它的有效期足够短。
标题中的一周是风险示例,现有材料没有证明它是默认配置。示例生成约一分钟后到期的授权,并把签名时剩余有效期的上限设为两分钟,同时检查链 ID、token 合约、收款方、金额和 nonce。
泄露签名的人可以提交既定转账,但不能据此任意修改已签署的收款方或金额。
另一处风险在重试:请求超时后,若重新生成 nonce 并签名,同一笔购买可能形成两份可结算授权。nonce 防止同一授权重复使用,无法识别两份授权对应同一次购买。作者提出重发原签名。
我的判断
接入自动付费时,我会把签名当成付款权限的出口,在这里强制检查支付策略。缩短有效期能压缩泄露后的兑现时间,但不能替代重试幂等处理。
超时后的关键问题,是原授权是否已经结算。
节选代码还不能直接视为完整防线:sign() 内没有强制调用检查,检查也没有明确拒绝已经过期的授权;nonce 记录仅保存在内存中。生产接入前,需要补齐检查与签名的强制衔接、持久化及结算状态处理。具体 SDK 的默认有效期和重试行为,仍要等完整原文或官方文档确认。