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

如何创建有效的S3预签名POST请求?签名不匹配问题排查

问题原因及解决办法

你的表单字段与预签名POST返回的fields不匹配,这是导致签名验证失败的核心问题:

  1. 错误的字段处理

    • 你手动添加了AWSAccessKeyId字段,但预签名POST返回的是X-Amz-Credential,无需单独提供AccessKeyId
    • 你使用了小写的policy和signature,但返回的是大写开头的Policy和X-Amz-Signature,S3对字段名大小写敏感
    • 遗漏了X-Amz-Algorithm、X-Amz-Date这两个必填字段
  2. 正确的表单写法
    需完全复用预签名POST返回的所有fields字段,不要自行修改或增减。正确代码如下:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    <form action="https://my-bucket.s3.us-east-1.amazonaws.com/" method="post" enctype="multipart/form-data">
        <!-- 完全复制返回的fields里的所有键值对 -->
        <input type="hidden" name="bucket" value="my-bucket" />
        <input type="hidden" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
        <input type="hidden" name="X-Amz-Credential" value="AKIA4V7ALGPKSB2AEP4E/20230515/us-east-1/s3/aws4_request" />
        <input type="hidden" name="X-Amz-Date" value="20230515T032603Z" />
        <input type="hidden" name="key" value="my-key" />
        <input type="hidden" name="Policy" value="eyJleHBpcmF0aW9uIjoiMjAyMy0wNS0xNVQwNDoyNjowM1oiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJteS1idWNrZXQifSx7IlgtQW16LUFsZ29yaXRobSI6IkFXUzQtSE1BQy1TSEEyNTYifSx7IlgtQW16LUNyZWRlbnRpYWwiOiJBS0lBNFY3QUxHUEtTQjJBRVA0RS8yMDIzMDUxNS91cy1lYXN0LTEvczMvYXdzNF9yZXF1ZXN0In0seyJYLUFtei1EYXRlIjoiMjAyMzA1MTVUMDMyNjAzWiJ9LHsia2V5IjoibXkta2V5In1dfQ==" />
        <input type="hidden" name="X-Amz-Signature" value="594df7cd680b04c99dcf48a105e15c6d1f8109d1c6b61be98420b03d20979a40" />
        <input type="file" name="file" /> <br />
        <input type="submit" name="submit" value="Upload to Amazon S3" />
    </form>
    </body>
</html>
  1. 额外注意
    • 确保所有字段的名称、大小写和值都与返回的fields完全一致,任何修改都会导致签名验证失败
    • 检查预签名POST的有效期(可解码Policy查看过期时间),过期后需重新生成预签名参数

内容的提问来源于stack exchange,提问作者Bill Barrington

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:00:23