gpt4 book ai didi

file-upload - 由 Shopify 生成的对谷歌云存储签名 URL 的 PUT 请求引发错误 MalformedSecurityHeader

转载 作者:行者123 更新时间:2023-12-04 13:34:30 28 4
gpt4 key购买 nike

我正在尝试通过 Shopify GraphQL Admin API 将 .glb 文件上传到 Shopify 商店中的产品。为此,它首先返回一个谷歌云存储签名 URL,我应该通过 HTTP PUT 请求将我的文件上传到那里。上传后,我应该使用另一个 API 调用将相同的 URL 附加到产品。
这个问题是关于上传到云存储签名 URL 的文件。我包括所有这些细节,使这个问题很容易得到回答。 所以,请阅读到最后 .

  • Shopify 为我提供的数据如下所述。
  • {
    "data": {
    "stagedUploadsCreate": {
    "stagedTargets": [
    {
    "parameters": [
    {
    "name": "GoogleAccessId",
    "value": "threed-model-service--6bgx7cbe@shopify-applications.iam.gserviceaccount.com"
    },
    {
    "name": "key",
    "value": "models/a6436c066064bac3/windmill.glb"
    },
    {
    "name": "policy",
    "value": "eyJleHBpcmF0aW9uIjoiMjAyMC0wNy0yMVQwOToxNjoxMFoiLCJjb25kaXRpb25zIjpbWyJlcSIsIiRidWNrZXQiLCJ0aHJlZWQtbW9kZWxzLXByb2R1Y3Rpb24iXSxbImVxIiwiJGtleSIsIm1vZGVscy9hNjQzNmMwNjYwNjRiYWMzL3dpbmRtaWxsLmdsYiJdLFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLDE5NzE3MiwxOTcxNzJdXX0="
    },
    {
    "name": "signature",
    "value": "vz+OdcEmD9Kbv2FbXdxWNUk59XO2GmXzhvtDswXbDQNcyZpUufI85z5x2PFGv/XZ+tSBsl/S393pmy0Bu9xG7oVgOZcMIWEbOIm9kXgQunbjKQY3Ff3BBpMocB0xazzlYmckZozdJ8ZZkyox/c/gEe1QaxqW4+419iufuFHy4Bp3LL/aUr+ATNChwn9Dn8+XnHMOckZxDlbiggcF3dx+yBuTFia8FneaVSiU0M5DIWmHqHb2YDCV0KtEP6jfTj/PQVUjS8pn8EGhrRaMx7Q2A5G8Pycgc9H35hqJnnUKCTa3AYeyI45RbhddYnIWw9YrAADXuQYlVCo6LYBHjxsCWA=="
    }
    ],
    "resourceUrl": "https://storage.googleapis.com/threed-models-production/models/a6436c066064bac3/windmill.glb?external_model3d_id=bW9kZWwzZC00MDg5Ng==",
    "url": "https://storage.googleapis.com/threed-models-production/models/a6436c066064bac3/windmill.glb?external_model3d_id=bW9kZWwzZC00MDg5Ng=="
    }
    ],
    "userErrors": []
    }
    }
    }
  • 使用这些参数,我构造了一个签名 URL,如下所示。
  • resourceUrl+"&signature="+signature+"&key="+key+"&policy="+policy+"&GoogleAccessId="+GoogleAccessId
    例如:
    https://storage.googleapis.com/threed-models-production/models/a6436c066064bac3/windmill.glb?external_model3d_id=bW9kZWwzZC00MDg5Ng==&signature=vz+OdcEmD9Kbv2FbXdxWNUk59XO2GmXzhvtDswXbDQNcyZpUufI85z5x2PFGv/XZ+tSBsl/S393pmy0Bu9xG7oVgOZcMIWEbOIm9kXgQunbjKQY3Ff3BBpMocB0xazzlYmckZozdJ8ZZkyox/c/gEe1QaxqW4+419iufuFHy4Bp3LL/aUr+ATNChwn9Dn8+XnHMOckZxDlbiggcF3dx+yBuTFia8FneaVSiU0M5DIWmHqHb2YDCV0KtEP6jfTj/PQVUjS8pn8EGhrRaMx7Q2A5G8Pycgc9H35hqJnnUKCTa3AYeyI45RbhddYnIWw9YrAADXuQYlVCo6LYBHjxsCWA==&key=models/a6436c066064bac3/windmill.glb&policy=eyJleHBpcmF0aW9uIjoiMjAyMC0wNy0yMVQwOToxNjoxMFoiLCJjb25kaXRpb25zIjpbWyJlcSIsIiRidWNrZXQiLCJ0aHJlZWQtbW9kZWxzLXByb2R1Y3Rpb24iXSxbImVxIiwiJGtleSIsIm1vZGVscy9hNjQzNmMwNjYwNjRiYWMzL3dpbmRtaWxsLmdsYiJdLFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLDE5NzE3MiwxOTcxNzJdXX0=&GoogleAccessId=threed-model-service--6bgx7cbe@shopify-applications.iam.gserviceaccount.com
  • 然后我尝试使用 POSTman 中的 .glb 文件向该 URL 发出 PUT 请求,如下图所示 -->
    enter image description here

  • 带有以下标题。
    enter image description here
  • 但我没有得到成功的回应。事实上,我收到以下消息的 400 错误。
  • <?xml version='1.0' encoding='UTF-8'?>
    <Error>
    <Code>MalformedSecurityHeader</Code>
    <Message>Your request has a malformed header.</Message>
    <ParameterName>signature</ParameterName>
    <Details>Signature was not base64 encoded</Details>
    </Error>
    有人可以指出我在这里做错了什么吗?我已经处理这个错误好几天了,阅读了很多问题和文章,但无法让它发挥作用。因此,非常感谢任何有用的建议。

    最佳答案

    一些建议供您尝试:

  • 在生成初始请求时(Shopify 在这种情况下这样做),GCS 通常包含该请求的 HTTP header 并将它们包含在请求签名中,并期望上传请求(您尝试执行的请求)匹配相同的 HTTP header 值.
    这意味着建议您仅在签名 key 上传请求中包含 Shopify 在其请求中指定的那些 header ,而不要包含任何额外内容。因此,首先尝试删除 Shopify 未记录的所有 HTTP header (例如由 POSTMAN 添加的 header )并确保所有 header 值遵循 Shopify 文档(例如 Content-Type 应匹配)
  • 您需要确保签名参数采用预期的名称和格式:
  • 签名值字段命名为:x-goog-signature而不是 signature (这可能是导致 GCS 找不到预期参数的错误的原因)
  • 您可能还必须提供签名算法 key ( x-goog-algorithm )
  • 您可能还需要其他 key ,具体取决于身份验证等其他因素
    我想说这些应该由 Shopify SDK 和/或示例记录


  • 为您简化/加速事情的一个建议可能是使用 Google Cloud Utils(gsutil 命令行工具)创建一个签名的 url 请求,然后尝试在您的代码中重现相同的行为
    有关更多信息,请参阅以下链接:
    https://cloud.google.com/storage/docs/access-control/signed-urls
    https://cloud.google.com/storage/docs/access-control/signing-urls-with-helpers#gsutil
    然后在熟悉签名 url 格式后,您可以查看一些示例代码,了解如何在您自己的代码中执行此操作:
    https://cloud.google.com/storage/docs/access-control/signing-urls-manually
    供您在阅读文档时引用,您尝试创建的签名 URL 类型是不可恢复上传(使用单个 PUT 请求)而不是可恢复上传(使用初始 POST 加上一系列 PUT)
    抱歉,我没有与 Shopify 合作过,但以上内容来自我使用 GCS 签名网址的经验

    关于file-upload - 由 Shopify 生成的对谷歌云存储签名 URL 的 PUT 请求引发错误 MalformedSecurityHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62995003/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com