禁止访问身份 'my-identity-that-exists-in-cognito-identity-browser'

Access to Identity 'my-identity-that-exists-in-cognito-identity-browser' is forbidden

假设您实现了两个外部提供程序,例如 Twitter and Facebook What is the correct, best practice JSON document for the Authenticated IAM role trust relationship. I have tried reading this blog post and this documentation 但我仍然遇到问题。我目前的政策是:

{
  "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"
        }
      }
    }
  ]
}

但我总是失败

Access to Identity 'my-identity-that-exists-in-cognito-identity-browser' is forbidden.

在我从开发人员提供的身份验证切换到亚马逊的其中一家提供商后,这才开始出现问题。除了非常标准的设置之外,我真的找不到任何示例,而且我在尝试理解此文档时遇到了问题。

更新

开发者错误。正如@jeff-bailey 所建议的那样,您必须确保您的提供商具有正确的登录映射。遵循示例不足以满足所有情况。就我而言,我有非常粘性的会话,这些会话会在应用程序终止甚至重新安装时持续存在。如果您已经拥有社交令牌并跳过传统的登录屏幕,您必须不要忘记设置您的令牌。您不能只依赖 fabric/facebook 身份验证回调。

您为两个提供商使用两个池而不是只使用一个池是否有特殊原因? Cognito 将您限制为每个池中每个提供者一个应用程序,但您可以在同一池中使用不同的提供者,这将允许您使用标准角色。

编辑:听起来登录映射内容可能存在问题。具有经过身份验证的 ID 的未来调用必须具有与其链接的相同登录令牌。因此,如果您使用 Twitter 身份验证创建了身份 ID,则尝试在没有 Twitter 令牌的情况下使用该 ID 会给您带来异常。请确保您包括 it/properly 在应用重启时恢复应用会话等。 我会再看一遍,如果你不是那肯定会导致那个问题。