如果您想发布和/或订阅主题,您可以采取两种不同的方法。
- 对 API 端点的 HTTPS 调用。
- 使用您选择的任何受支持的 AWS 开发工具包(python、java、.NET 等)或 AWS CLI
对于“缺少身份验证令牌”异常,您得到的异常是由于请求中的身份验证令牌和亚马逊特定标头不可用。为了使您的 HTTPS 请求正常工作,您可以使用 REST 客户端添加亚马逊特定标头或编写程序。
您应该尝试执行以下步骤以使您的 https 请求正常工作。
详细步骤请参考http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html
任务 1:创建规范请求
- 第 1 步是定义动词(GET、POST 等)
- 第 2 步:创建规范 URI。
- 步骤 3:创建规范查询字符串。
- 步骤 4:创建规范标头和签名标头。
- 步骤 5:创建签名标头列表。
- 步骤 6:创建有效负载哈希(请求正文内容的哈希)
- 第 7 步:组合元素以创建规范请求
任务 2:创建要签名的字符串
使用 SHA256 算法,对规范请求进行哈希处理(使用任何编程语言/工具)并创建一个要签名的字符串,如下所示
string_to_sign = YourHashingAlgorithm + '\n' + CurrentDateInUTC+ '\n'
+ credential_scope + '\n' + yourHashedCanonicalRequest
AWS 服务的 API 由服务路径唯一标识。对于物联网来说是“iotdata/aws4_request”。因此,上面“string_to_sign”中的 credential_scope 应该类似于
credential_scope = 日期戳 + '/' + us-west-2+ '/' + iotdata+ '/' +
'aws4_请求'
任务 3:计算签名
使用前面步骤中使用的相同算法计算哈希值。
请参阅上述链接了解更多详细信息。
任务 4:向请求添加签名信息
在这里,您需要设置一些标头,例如“x-amz-date”、“Authorization”、“SignedHeaders”和“Signature”。此 Signature 标头将携带步骤 3 的最终值。
Note:这些标头都不是可选的。每个 HTTPS 请求都应该包含所有这些信息以进行身份验证和授权。否则 AWS API 将拒绝它。
您应该收到 200 OK 响应,以确保您的请求得到实际处理。
对于 .Net 方法,您可以尝试使用 AWS 的 .NET SDK 并尝试检查最终请求。我从未尝试过直接在代码中使用 x.509 证书。我认为您的请求中缺少标头。
在 cURL 中,它会像下面这样
curl "https://iot.amazonaws.com https://iot.amazonaws.com” \
--请求获取\
--form“操作=UpdateThing”\
--form“用户名=iam_user”\
--form“CertificateBody=@~/.aws/credentials/sample/cert.pem”\
--form“版本=2010-05-08”\
- 形式 ”授权参数"
希望这可以帮助