假设您实现了两个外部提供者,如Twitter和Facebook。对于Authenticated IAM角色信任关系,什么是正确的,最佳实践JSON文档?我试着阅读这篇博客文章和这个文档,但我仍然有问题。我目前的策略是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:mypool"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
但我总是失败
禁止访问身份'my-identity-that-exists-in-cognito-identity-browser'。
这个问题在我从开发者提供的身份验证切换到Amazon的一个提供商之后才开始出现。除了非常标准的设置之外,我真的找不到任何例子,而且我在试图理解这个文档时遇到了问题。
开发人员的错误。正如@jeff-bailey所建议的,您必须确保您的提供商具有正确的登录映射。下面的例子并不足以满足所有的情况。在我的例子中,我有一个非常粘的会话,在应用终止甚至重新安装期间持续存在。如果你已经有了自己的社交令牌,并且跳过了传统的登录界面,那么必须不要忘记设置令牌。你不能只依赖fabric/facebook身份验证回调。
您为两个提供者使用两个池而不是仅使用一个池是否有特殊原因?Cognito限制您在每个池中为每个提供者提供一个应用程序,但您可以在同一池中使用不同的提供者,这将允许您使用标准角色。
编辑:听起来像是登录地图的内容可能持有的问题。具有经过身份验证的id的未来调用必须具有链接到它的相同登录令牌。如果你用Twitter认证创建一个身份id,尝试在没有Twitter令牌的情况下使用那个id会给你那个异常。确保你在应用重启时包含它/正确地恢复应用会话等。我会再看一遍,如果不是的话肯定会导致这个问题