AWS IoT - 通过.Net、REST 和证书访问影子

2024-01-06

为了学习 AWS IoT,我创建了一些“事物”+ 一个策略,我什至能够使用 IoT CLI 来列出事物 or 列表策略。我什至可以通过 CLI 更新影子更新事物通过 CLI 命令。但是一旦我尝试通过 REST GET / POST 请求(通过 .Net 程序或直接像https://XXXXXXXXXXXXX.iot.us-west-2.amazonaws.com/things/mything/shadow https://XXXXXXXXXXXXX.iot.us-west-2.amazonaws.com/things/mything/shadow),我收到一个

“缺少身份验证令牌”

。所以我开始使用证书。这是我的代码的一部分:

string Certificate = "xxxxxxxxx-certificate.crt"; // downloaded from my thing
X509Certificate cert = new X509Certificate(Certificate);
WebRequestHandler handler = new WebRequestHandler();
handler.ClientCertificates.Add(cert);
HttpClient client = new HttpClient(handler);
// url = @"https://xxxxxxxxxxxxx.iot.us-west-2.amazonaws.com/things/<mything>/shadow";
HttpResponseMessage webResponse = client.GetAsync(url, HttpCompletionOption.ResponseContentRead).Result;

结果是:

状态代码:403,原因短语:“禁止”,版本:1.1,内容:System.Net.Http.StreamContent,标头:
{
x-amzn-RequestId:25f3c1dc-9ddd-4787-a4cf-cb79dc96748b
连接:保持活动状态
x-amzn-ErrorType:ForbiddenException:
日期:2015 年 12 月 15 日,星期二 08:53:56 GMT
内容长度:91
内容类型:application/json
}

有什么帮助吗?


如果您想发布和/或订阅主题,您可以采取两种不同的方法。

  1. 对 API 端点的 HTTPS 调用。
  2. 使用您选择的任何受支持的 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”\ - 形式 ”授权参数"

希望这可以帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS IoT - 通过.Net、REST 和证书访问影子 的相关文章

  • 为什么 $_SERVER["PHP_AUTH_USER"] 和 $_SERVER["PHP_AUTH_PW"] 没有设置?

    在开始之前 我想指出我浏览过 Stack Overflow 并发现了其他类似的问题 PHP AUTH USER 未设置 https stackoverflow com questions 3663520 php auth user not
  • 用于格式化和挂载所有可用实例存储设备的脚本

    Amazon 提供实例存储 http docs amazonwebservices com AWSEC2 latest UserGuide InstanceStorage html对于 EC2 实例 如果您使用自己的 AMI 则不会自动为您
  • 在闪亮的应用程序和多个页面中进行身份验证

    在我正在开发的系统中 我有 3 个不同的参与者 用户 管理员 支持团队 使用 Shiny App 我想知道如何向这三个参与者进行身份验证 每个参与者只能访问他们的页面 我发现使用闪亮的服务器专业版可以实现这一点 但它不是免费的 有什么方法可
  • ActiveAdmin 使用 Devise Rails 登录两次

    我有一个Rails已设置使用的应用程序devise with User模型 我只是添加ActiveAdmin并且它使用单独的型号名称AdminUser 这个新模型也使用了设计 我遇到的问题是 当我去localhost 3000 admin
  • Cloudwatch 仪表板:具有独立时间范围的小部件?

    我希望仪表板中的每个小部件都有自己的时间范围 我找不到办法做到这一点 如果不可能的话 我会发现它令人难以置信 我希望我的仪表板包含以下内容堆积区域小部件 过去一小时内 30 秒周期的请求计数 即 120 个绘图点 过去一天以 1 小时为周期
  • Restlet 和 MULTIPART_FORM_DATA 或通过 Restlet 将文件放在 Google App Engine 上的其他方式

    我尝试通过 Restlet 接收文件 但只获得完整的 MULTIPART FORM DATA 如何提取我的特定文件 我找到了一些代码块 但它们的类型不可用 RESTlet 如何处理多部分 表单数据请求 https stackoverflow
  • 关于 S3 文件传输的权限

    我正在使用 S3TransferManager Sample 进行测试 我创建了Cognito并设置了IAM并最后更改了constants swift文件 我上传没有问题 但下载失败 错误信息是 下载失败 错误域 com amazonaws
  • 具有维度的 Amazon Web Service CloudWatch 自定义指标

    我正在尝试将数据推送到 AWS CloudWatch 上的自定义指标 但想了解有关维度的更多信息以及如何使用它们 我已经阅读了 AWS 文档 但它并没有真正解释它们的用途以及它如何影响 AWS 管理控制台中的图形 UI 维度是进一步细分指标
  • 在 Java 服务器中验证 Windows 用户

    我正在开发一个用 Java 编写的服务器和一个在同一网络上的 Windows 计算机上运行的客户端 用 Net 编写的桌面应用程序 我希望进行一些基本身份验证 以便服务器可以确定运行客户端的用户的用户名 而不需要用户在客户端中重新输入其 W
  • 使用自己的 Web 应用程序 API - 使用 OAuth2 进行身份验证过程

    Overview 我目前正在为图像共享应用程序创建 API 该应用程序将在网络上运行 将来在移动设备上运行 我了解 API 构建的逻辑部分 但我仍然在努力满足我自己对身份验证部分的要求 因此 我的 API 必须可供全世界访问 具有访客访问权
  • DMARC/SPF/DKIM 未使用第三方邮件进行身份验证

    我们最近为我们的域实施了 DMARC 记录 v DMARC1 p 隔离 pct 100 rua mailto 电子邮件受保护 cdn cgi l email protection 隔离 100 未经身份验证的电子邮件并将汇总报告发送给 我
  • 如何在WCF Rest服务中从流上传图像

    我正在尝试创建 wcf 服务 该服务将上传 pdf doc xls 图像等文件 但 pdf txt 文件正在上传并正确打开 但是当我尝试上传图像文件时 文件正在上传 但是图像不可见 OperationContract WebInvoke M
  • AWS DMS 无法截断 SQL 事务日志

    我们正在运行 AWS DMS 以 SQL 作为源 以 DynamoDB 作为目标 我们很难截断事务日志 我们看到每个 AWS DMS 有 2 个 SQL 任务 如下所示 begin transaction WVGLQ7HFWFWJCCPK4
  • AWS Lambda 调用错误未触发 SQS 死信队列

    我有一个 AWS Lambda 函数 它订阅 DynamoDB 流并配置了SQS 死信队列 DLQ https docs aws amazon com lambda latest dg dlq html 我可以看到管理控制台中配置了正确的队
  • 如何动态更新我的 AWS CloudWatch 控制面板?

    我在 CloudWatch 中有几个仪表板 它们代表我的基础设施的静态视图 例如 自动扩展工作组中当前正在运行的实例数量 或者各种关键 EC2 实例的 CPU 磁盘状态 但是 当我添加新实例时 我总是需要手动更新仪表板以将它们包含在显示中
  • 如何在 Jersey 容器中配置欢迎文件 (HTML/JSP)

    我有一个 Jersey RESTful Web 服务项目 我已经在中配置了 Jersey 容器web xml一切正常 在同一个项目中 我引入了一个 HTML 页面并包含在
  • AWS LoadBalancer监听多个端口

    我有一些应用程序在 aws 中作为微服务运行 其中一些在端口 80 上运行 一些在端口 3000 上运行 我希望我的 ALB 侦听这两个端口上的流量 然后我有一个ListenRules将流量引导至微服务 我想实现如下所示的目标 Resour
  • AWS 卷备份为空

    我是 AWS 新手 我有一个在 AWS 中运行的实例 现在我想将该实例卷放入新实例中 该卷包含大约 8GB 的 内容 我按照以下帖子中的第一个答案进行操作 更改 ec2 实例的密钥对 https stackoverflow com ques
  • Elastic Beanstalk、Bundler 找不到 gem“bundler”的兼容版本

    我已经尝试过将 Elastic Beanstalk 用于 Rails 当我运行 eb deploy 时出现此错误 我需要至少安装bundler 1 8 4 知道如何解决这个问题吗 Bundler could not find compati
  • 在哪里放置资源特定逻辑

    您能帮我考虑在 AngularJS 中将资源 服务 特定的业务逻辑放置在哪里吗 我觉得在我的资源上创建一些类似模型的抽象应该很棒 但我不确定如何做 API调用 gt GET customers 1 lt first name John la

随机推荐

  • 使用 Runnable 作为回调/子例程是不好的做法吗?

    使用它是否被认为是不好的做法Runnable作为回调 考虑到Runnable旨在与线程一起使用 请参阅它的JavaDoc 我想知道这是否可以 或者我是否应该为此目的创建自己的接口 我所说的是这样的 public class KeyBindi
  • CSS:从 2 而不是 1 开始对页面进行编号

    在 CSS 中 使用 page top right content Page counter page of counter pages 打印页面时 我可以在每页的顶部显示页码 这很好用 但现在 我怎样才能使页码以 2 而不是 1 开头呢
  • 如何让 R 根据方差分析得出 F 统计量的临界值?

    R 中的方差分析缺少的一件事是它不会自动显示临界值 其他的一切都给了 我可以看出我的 F 值远高于应有的值 但我想知道截止点的余量 有一个在线计算器可以根据自由度生成 F 统计量的临界值 但我希望 R 能够做到这一点 http www da
  • “git checkout 标签名”与“git reset --hard 标签名”

    我知道有这样的问题this https stackoverflow com questions 2541545 is there a difference between git reset hard hash and git checko
  • lambda 演算中的 Beta 约简:求值顺序重要吗?

    给定以下 lambda 表达式 其中 类似于lambda kf f c co km x dox le le 如果我转换的话会有错误吗 c co k into ko 我这样做了 但显然这是错误的 正确的方法是首先评估外部函数 这意味着 f f
  • 为什么 Django 1.9 在设置和 URL 中用列表 [] 替换 tuples () ?

    我有点好奇为什么 Django 1 9 在设置 URL 和其他配置文件中用列表 替换 tuples 我刚刚升级到 Django 1 9 并注意到这些变化 它们背后的逻辑是什么 INSTALLED APPS django contrib ad
  • 带 Joda 时间的本地化日期格式,不含年份

    我正在尝试以本地格式显示日期 但没有年份 所以应该是 12 June for UK June 12 for US 用Joda时间可以实现吗 我们尝试过 dd MMMM 模式 但它不起作用 我们已经尝试过了StringFormat longD
  • 使用 lodash 构建 Angular 2 CLI

    导入总是导致错误 找不到模块 lodash import from lodash 角度 cli build js module exports function defaults return new Angular2App default
  • 面对非阻塞I/O如何设计状态机?

    我正在使用 Qt 框架 该框架默认具有非阻塞 I O 来开发一个应用程序 该应用程序可以浏览多个网页 在线商店 并在这些页面上执行不同的操作 我将特定网页 映射 到状态机 我用它来浏览该页面 该状态机具有以下转换 Connect LogIn
  • 使用主构造函数继承类

    我有一个父类如下 interface ITask open class Task val targetServer Server ITask 然后有一个子级继承它并覆盖主构造函数 如下所示 data class FileTask val s
  • 使滚动条在 UIScrollView 上始终可见?

    我需要使滚动条在 viewDidLoad 上始终可见 以便用户可以了解有内容可以滚动 我做了以下事情 myscrollView flashScrollIndicators 但是滚动条只会在 viewDidLoad 之后出现一段时间 然后再次
  • node.js fs - “向后”流文件 - 从下到上

    使用 Node js 将文件从文件系统流式传输到 Node js 但从下到上向后读取它的最佳方法是什么 我有一个大文件 如果我只想要最后 10 行 从顶部读取似乎没有多大意义 这可能吗 现在我有这个可怕的代码 我们使用浏览器执行 GET 请
  • NuGet - 找不到“添加库包引用...”

    我正在使用安装了 MVC3 的 Visual Studio 2010 SP1 由于我正在学习 NuGet 基础知识 因此我正在阅读本教程http maleevdimka com post NuGet Part 1 aspx http mal
  • Nativecript Fontawesome 5 iPhone 无法工作

    我正在尝试让 Font Awesome 5 在 Android 上运行 但它不起作用 使用https github com NathanWalker nativescript ngx fonticon https github com Na
  • ListView ArrayAdapter,将子项隐藏在 Row 中?

    我觉得有点愚蠢 因为我找不到这个问题的答案 这让我觉得我实际上是在问wrong问题 然而 这里 我有一个列表视图和一个在 xml 中定义的 listviewitem 有几个字段 没有什么特别的 全部设置为可见 然后 我使用自定义 Array
  • 使用 GDB 调试模板

    My gdb是 GNU gdb Red Hat Linux 6 3 0 0 1 162 el4rh 我无法调试模板 如何使用此调试器调试模板 如果您的问题只是在代码中放置断点 这是一个小片段 例如 main cpp include
  • 32/64 位的 MSBuild 和 $(ProgramFiles) 问题

    我编写了一个自定义 MSBuild 任务 它调用SubWCRev exe 一个可执行文件 通常 驻留在C Program Files TortoiseSVN bin 无论是 32 位还是 64 位 因为 TortoiseSVN 提供这两个版
  • 隐藏地图注释而不删除它们

    使用 MKMapView 我加载了一堆注释 并且我希望能够过滤使用分段控件显示的注释 我使用带有类型变量的自定义注释 这样我就可以将它们彼此区分开来 但我无法找到一种方法来随意隐藏和显示注释视图的子集 当然可以 试试这个 Objective
  • 在ajax请求中设置$_SESSION

    我有这个 Jquery Ajax 函数可以在网页中登录 url ajax type POST url url data success function jsonResponse var json JSON parse jsonRespon
  • AWS IoT - 通过.Net、REST 和证书访问影子

    为了学习 AWS IoT 我创建了一些 事物 一个策略 我什至能够使用 IoT CLI 来列出事物 or 列表策略 我什至可以通过 CLI 更新影子更新事物通过 CLI 命令 但是一旦我尝试通过 REST GET POST 请求 通过 Ne