目前我正在构建一个通过 Web 套接字连接到 AWS IOT MQTT 的 android 应用程序。我已经建立了一个联合身份池和 IOT 完全访问策略,我尝试了未经身份验证访问的策略并连接到 MQTT 并能够订阅和发布消息。此外,我已经为使用亚马逊登录设置了所有内容,并在池中启用了身份验证提供程序,并成功登录了应用程序。但是,目前我面临登录后无法连接到物联网的麻烦。我将物联网完全访问策略附加到经过身份验证的角色,并在我成功登录时将亚马逊令牌放入提供程序。我已阅读我拥有的文档将信任关系设置为 www.amazon.com,因此,我尝试使用亚马逊身份登录设置一个新角色,并为联合身份池中经过身份验证的用户切换到该角色。但是当我登录应用程序时,应用程序发生冲突说池配置无效。我可以知道接下来我该怎么做才能连接到 IOT mqtt 吗?这是我的 Login with Amazon 角色的信任权限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "www.amazon.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"www.amazon.com:app_id": "amzn1.application.***********************"
}
}
}
]
}
此外,我读过一份文件说我必须在信任关系中将系统生成的身份验证角色 cognito-identity.amazonaws.com:amr 更改为身份提供者。因此,我改为使用亚马逊登录。我为经过身份验证的用户切换到这个角色。这一次,我登录了应用程序,应用程序没有冲突,但连接到MQTT的状态一直在重新连接。下面是系统生成的认证角色的信任关系策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "www.amazon.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"www.amazon.com:app_id": "amzn1.application.***************"
}
}
},
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:*******-****-*****-****-*********"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "www.amazon.com"
}
}
},
{
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}