gpt4 book ai didi

amazon-web-services - 我如何为 Amazon SQS 生成查询 URL

转载 作者:行者123 更新时间:2023-12-02 00:23:19 24 4
gpt4 key购买 nike

我打算编写一个程序,可以通过身份验证从 SQS 发布和读取消息,我已经从这里阅读了文档链接:Query Request Authentication

我已经成功编写了将消息发布到指定队列的过程,然后是文档。但是当我尝试从队列接收消息时,总是会出现 403 错误。而且我发现签名字符串规则对于 POST 和 GET 方法是不同的。

签名字符串为:

GET\n
sqs.us-east-1.amazonaws.com\n
/<My Account Id>/<Queue Name>\n
AWSAccessKeyId=<My Access Key>
&Action=ReceiveMessage
&MaxNumberOfMessages=10
&VisibilityTimeout=600
&AttributeName=All
&Expires=2012-04-01T11%3A29%3A24Z
&SignatureMethod=HmacSHA1
&SignatureVersion=2
&Version=2011-10-01

网址是

https://sqs.us-east-1.amazonaws.com/<My Account Id>/<Queue Name>?
Action=ReceiveMessage
&MaxNumberOfMessages=10
&VisibilityTimeout=600&AttributeName=All
&Version=2011-10-01
&Expires=2012-04-01T11%3A29%3A24Z
&Signature=<BASE64 encoded HmacSHA1 digist with signature string and my security key>
&SignatureVersion=2
&SignatureMethod=HmacSHA1
&AWSAccessKeyId=<My Access Key>

而且我总是收到 403 禁止错误:

<ErrorResponse xmlns="http://queue.amazonaws.com/doc/2011-10-01/">
<Error>
<Type>Sender</Type>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
</Message>
<Detail/>
</Error>
<RequestId>16f6e910-62e6-4259-8c09-0358b84cbe60</RequestId>
</ErrorResponse>

有没有人可以告诉我该如何处理?非常感谢

最佳答案

错误消息告诉您签名计算错误。这真的很难调试。我第一次尝试时花了几个小时。在 http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/MakingRequests_MakingQueryRequestsArticle.html 处有一个签名的 SQS 请求示例.您应该将这些参数放入您的程序中,计算签名,并尝试在您的程序中查找错误以创建相同的签名。

我遇到的具体问题及其修复包括:

  • 正确排序查询参数。创建要签名的字符串时,它们必须按升序排列。您的示例网址未按顺序显示。在创建要签名的字符串时,您是否对它们进行了不同的排序?
  • URI 编码正确。每个参数都必须在要签名的字符串中进行 URI 编码。您的示例 URL 确实有 URI 编码,所以这可能不是您的问题。但请确保您没有进行双重编码。
  • 填充 base64 签名。至少一些 AWS 服务坚持要求签名的长度是四个字符的倍数。三分之二的情况下,base64 编码会太短,需要在其后附加一两个等号。大多数 base64 编码库都会为您执行此操作,但不是全部。

当然,最简单的方法就是使用别人的库来发出请求,但这有什么好玩的呢?祝调试顺利。

关于amazon-web-services - 我如何为 Amazon SQS 生成查询 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969857/

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