gpt4 book ai didi

amazon-web-services - 使用带有 Cognito 身份验证用户的 Web 套接字连接到 AWS IoT

转载 作者:行者123 更新时间:2023-12-03 19:52:38 26 4
gpt4 key购买 nike

我正在尝试使用浏览器中的 Web 套接字连接到 AWS IoT。

我试过这个例子:
https://github.com/awslabs/aws-iot-examples/tree/master/mqttSample

另一个稍作修改,因此可以与 Cognito 身份池登录用户一起使用。
https://github.com/dwyl/learn-aws-iot/blob/master/src/js/utils/request.js#L27

如果我使用具有有效 IoT 策略的 IAM 用户,我可以成功连接,但如果我使用用户凭证,我会收到“101 Switching Protocols”响应,但随后会关闭。

与经过身份验证的用户关联的 IAM 角色是正确的,我可以签署请求并执行其他私有(private)操作,例如调用 APIG 端点。套接字连接也没有响应 403。所以这可能不是权限问题。

还能是什么?

最佳答案

对于未经身份验证的认知身份,“身份池已身份验证”角色足以允许连接到 IoT MQTT 代理。但是,对于经过身份验证的 cognito 身份,需要两件事:

  • “身份池已验证”角色必须允许访问您需要的 IoT 操作(例如连接、发布等)。
  • 您必须使用 AttachPrincipalPolicy API 将 IoT 策略(与附加到设备的策略完全相同)附加到认知身份。

  • 第 2 步是我今天早些时候被卡住的地方,因为在任何地方都不是特别清楚需要这样做。

    AFAIK 无法从任何 AWS 网站将 IoT 策略附加到认知用户。但是,如果您在机器上设置了 AWS 命令​​行界面,则可以从那里进行设置。该命令如下所示:
    aws iot attach-principal-policy --policy-name <iot-policy-name> --principal <cognito-identity-id>

    可以使用 Federated Identities > Your Pool > Identity browser 找到认知身份 ID。或者您也可以在对您的 CognitoIdentityCredentials.get 的回复中找到它。称呼。看起来像这样 us-east-1:ba7cef62-f3eb-5be2-87e5-fffbdeed2824
    对于生产系统,您显然希望自动附加此策略,可能在用户注册时使用 lambda 函数。

    文档中有关需要附加 IoT 策略的部分可在 this page 上找到。 :

    For an authenticated Amazon Cognito identity to publish MQTT messages over HTTP on topic1 in your AWS account, you must specify two policies, as outlined here. The first policy must be attached to an Amazon Cognito identity pool role and allow identities from that pool to make a publish call. The second policy is attached to an Amazon Cognito user using the AWS IoT AttachPrincipalPolicy API and allows the specified Amazon Cognito user access to the topic1 topic.

    关于amazon-web-services - 使用带有 Cognito 身份验证用户的 Web 套接字连接到 AWS IoT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40301345/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com