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

使用Requests包调用Amazon SNS发SMS遇认证令牌缺失错误如何解决?

解决Amazon SNS SMS请求MissingAuthenticationToken错误

你遇到的错误是因为AWS SNS API不支持HTTP Basic认证(也就是你用的auth=(aws_access_key_id, aws_secret_access_key)这种方式),AWS要求所有API请求必须使用AWS Signature Version 4进行签名,这才是有效的认证方式。

快速解决方案:使用requests-aws4auth库

最简单的方式是用requests-aws4auth库自动生成符合要求的签名,无需手动处理复杂的签名逻辑:

  1. 安装依赖:
pip install requests-aws4auth
  1. 修改代码如下:
import requests
from requests_aws4auth import AWS4Auth

url = "https://sns.eu-central-1.amazonaws.com"
aws_access_key_id = "YOUR_ACCESS_KEY"
aws_secret_access_key = "YOUR_SECRET_KEY"
region = "eu-central-1"
service = "sns"

# 生成AWS V4认证对象
auth = AWS4Auth(aws_access_key_id, aws_secret_access_key, region, service)

params = {
    "Action": "Publish",
    "Version": "2010-03-31",
    "PhoneNumber": "+49123456789",
    "Message": "Hello World!",
}

# 发送请求时使用生成的auth对象
response = requests.post(url, data=params, auth=auth)

print(response.text)

手动实现签名(不推荐)

如果必须避免第三方依赖,需要手动实现AWS Signature Version 4签名流程,这涉及到:

  • 构造规范请求字符串
  • 生成签名密钥
  • 计算请求签名
  • 在请求头中添加Authorization等签名相关字段

这个过程非常繁琐,需要严格遵循AWS的签名规范,容易出错,因此除非有特殊需求,优先推荐使用requests-aws4auth。

内容的提问来源于stack exchange,提问作者Gurkenkönig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:40:36