AWS MQTT Websocket,经过身份验证的访问受到限制

时间:2017-03-21 12:42:37

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

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

如果我在没有身份验证的情况下将MQTT客户端作为独立项目运行,假设IAM角色未经身份验证,我就可以连接到MQTT,并订阅&从给定的主题中接受。

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

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

IAM控制台中的unauth和auth角色具有相同的策略&资源访问,但有些东西正在停止MQTT连接。

PS。在我的应用中,Auth角色可以访问用户文件& S3,探测器似乎是物联网访问的唯一选择。

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

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

2 个答案:

答案 0 :(得分:0)

我没有足够的声誉发表评论,但我希望您看到question I have posed

它是在同一主题上,但区别在于我使用的是STS而不是Cognito。似乎经过身份验证的角色/用户无法使用基于Websockets的MQTT向AWS IoT发布/发布。我很感激任何人来证明我们。

编辑:我还raised this issue on AWS Forums。如果这不起作用,对我来说这是一个重要的交易破坏。

答案 1 :(得分:0)

我最终通过更全面地阅读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);