使用自定义授权器连接到 AWS IOT 并使用 MQTT 用户名密码

Connecting to AWS IOT using Custom Authorizer and use MQTT Username Password

我想使用用户名和密码连接到 AWS IOT 并发送有关主题的数据。我在 AWS IOT 文档中了解到我们可以使用自定义身份验证来实现这一点: https://docs.aws.amazon.com/iot/latest/developerguide/custom-authentication.html

我遵循了文档并且:

  1. 已创建自定义身份验证 Lambda
  2. 使用 Lambda ARN 在 AWS IOT 中创建自定义授权方
  3. 添加了自定义授权方来调用 lambda 函数。
  4. 已使用 aws iot test-invoke-authorizer
  5. 测试自定义授权方

我能够使用 aws int test-invoke-authorizer 为 MQTT 上下文测试 lambda。

但是当我尝试使用用户名密码 connect/publish 到 AWS IOT 时失败了。我按照以下文档进行操作。

这是我用来使用 mosquito.org cli

连接 AWS IOT 的命令
 mosquitto_pub -p 443 -i 'sample'  -h XXXXXXXXXX.iot.ap-south-1.amazonaws.com -u "username?x-amz-customauthorizer-name=my-new-authorizer" -P "dGVzdA==" -t test/hello -m "Hello World" -d

我收到的错误如下


Client sample sending CONNECT
Error: Unknown error.

注意:我没有像文档中提到的那样传递令牌和签名,因为我在 lambda 中禁用了它。

非常感谢任何帮助。

我收到了 AWS 高级支持的回复,根据他们的要求,我们必须在发出命令时包含 APLN。此外,我们还必须提供 AmazonRootCA1.pem

mosquitto_pub -p 443 -i 'sample' -h XXXX-ats.iot.ap-south-1.amazonaws.com -u "username?x-amz-customauthorizer-name=my-new-authorizer" -P "test" -t test/hello -m "Hello World" --tls-alpn mqtt --cafile AmazonRootCA1.pem -d

注意:他们建议了以下选项:

--cafile AmazonRootCA1.pem

--tls-alpn mqtt

您可以从这里下载证书 link:

https://www.amazontrust.com/repository/AmazonRootCA1.pem