使用 cognito 登录而不是证书来验证和订阅 aws IoT MQTT 主题?

Use cognito login instead of certificates to authenticate and subscribe to aws IoT MQTT topics?

我刚开始学习 AWS,我想弄清楚我的用例是否可行。我想创建一个移动应用程序,用户可以在其中登录(email/facebook/google 等),然后在 aws IoT 上订阅一些 MQTT 主题以接收园艺系统的实时传感器数据。 AWS 上有很多教程向您展示如何执行此操作 (主要示例:https://github.com/awslabs/aws-sdk-android-samples/blob/master/AndroidPubSub/README.md

但所有这些都要求您在 code/keystore 本身中下载证书、插入应用程序 ID、密钥等。我真的很想避免所有这些,只使用登录名作为订阅这些主题所需的所有授权。

这可能吗?还是我需要构建一些自定义系统?

简短回答,是的,这是可能的。为此,您应该执行以下操作:

  • 创建 Cognito 用户 池。 User Pool IDApp client id 将在下一步中使用。您可以找到更多信息 here.

  • 创建 Cognito Identity 池。在 Authentication Providers 下你应该给出 User Pool IDApp client id,更多信息 here。当您创建它时,它会在 IAM 中为经过身份验证的用户和未经身份验证的用户创建两个 Roles。您应该为这些角色添加 IoT 访问权限(连接、发布、订阅和接收)。

  • 在客户端(您的应用程序),选择您喜欢的 AWS SDK(Android、iOS、React、JS 等)并配置 User pool IDIdentity poolApp client ID 您应该首先通过将用户信息(通常是 Email/Username 和密码)发送到 Cognito 用户池来对用户进行身份验证。在return,你会得到一些代币

  • 在这些 IdToken (JWT) 中将被发送到身份池,在 return 中,您将获得 User Identity ID 以及需要的凭据(accessKeyId、secretAccessKey、sessionToken)访问 AWS 其他服务,例如 IoT。

  • 最后一步是为您的应用程序使用 aws-iot-sdk 以及这些凭据来发布和订阅您的 IoT 主题。您可以找到有关 aws-iot-sdk here.

  • 的更多信息