使用 REST 通过 Amazon SNS 服务发送 SMS

Sending SMS via Amazon SNS service using REST

我正在尝试对此 AWS 请求进行跟进: https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html

当你这样做时它会起作用 "as-is",但我正在尝试从该脚本发送短信,并继续收到 "signature mismatch" 响应(HTTP 403):

  <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>
  </Error>
  <RequestId>a58398ba-74c1-5308-abbe-cfe97a28fc30</RequestId>
</ErrorResponse>

现在,我在(默认)Python 脚本中更改的只是这一部分(当然,没有公开我的 phone 号码):

method = 'GET'
service = 'sns'
host = 'sns.us-west-2.amazonaws.com'
region = 'us-west-2'
endpoint = 'https://sns.us-west-2.amazonaws.com'
request_parameters = 'Action=Publish&Message=TestSenderID&Version=2010-03-31&PhoneNumber=00123123123'

当然,还替换了访问密钥和秘密密钥。

但是,例如,当我通过 Postman 发出相同的请求时,它起作用了。这让我怀疑这个请求可能有什么问题,只使用默认的 Python 脚本。

有人帮忙吗?

知道了! "request_parameters" 字符串有一个顺序,Version 应该放在最后。

Action=Publish&Message=Test&PhoneNumber=00123123123&Version=2010-03-31

如果以后有更多人被困在这个问题上,希望这对以后有所帮助。