【问题标题】:AWS MQTT Websocket, authenticated access being restrictedAWS MQTT Websocket,经过身份验证的访问受到限制
【发布时间】:2017-08-13 03:23:12
【问题描述】:

我目前正在 Android Studio 中开发一个 AWS 移动应用程序项目,并且我目前正在尝试通过 AWS Cognito 和 IAM 身份验证设置与 AWS IoT 的 MQTT 连接。

如果我将 MQTT 客户端作为独立项目运行而无需身份验证,假设一个未经身份验证的 IAM 角色,我可以连接到 MQTT,并订阅和接收给定主题。

但是,一旦我尝试通过经过身份验证的用户(通过登录我的移动应用程序)运行我的 MQTT 客户端,客户端就会受到限制,并且会不断尝试重新连接。

我在 AWS CloudWatch 中启用了日志记录,并给出了以下调试消息: "... EVENT:MQTT Client Connect MESSAGE:Connect Status: AUTHORIZATION_ERROR"

IAM 控制台中的 unauth 和 auth 角色具有相同的策略和资源访问权限,但有东西阻止了 MQTT 连接。

附言。 Auth 角色可以在我的应用程序中访问用户文件和 S3,这个问题似乎对于 IoT 访问是唯一的。

有谁知道是否可以在不使用证书文件的情况下允许通过授权用户进行连接,如果可以,如何?除非我弄错了,否则 Cognito 和 IAM 应该能够执行所需的授权来访问资源(只要我没有登录到 auth 角色,它就可以)

感谢我在这一点上能得到的任何提示,我已经挣扎了一段时间。

【问题讨论】:

    标签: java amazon-web-services authentication websocket mqtt


    【解决方案1】:

    我最终通过更彻底地阅读 AWS 文档找到了问题所在。

    AWS 凭证提供商不存储授权通过 AWS 进行访问所需的信息。因此,我通过将所需的用户令牌检索到哈希中并将其设置为凭据提供程序来解决问题,最终问题得到解决。

    AuthenticationResultType authenticationResultType = new AuthenticationResultType();
        String idToken = authenticationResultType.getIdToken();
    
    
        // Initialize the AWS Cognito credentials provider
        credentialsProvider = new CognitoCachingCredentialsProvider(
                getApplicationContext(),
                COGNITO_POOL_ID,
                MY_REGION
        );
    
        Map<String, String> logins = new HashMap<String, String>();
        logins.put("yourAWSEndpoint", idToken);
        credentialsProvider.setLogins(logins);
    

    【讨论】:

    • 您能否详细说明您是如何解决这个问题的?
    猜你喜欢
    • 1970-01-01
    • 2019-01-29
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2016-01-17
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多