如何使用Cognito Identity以信任关系指定Amazon AWS User Pool

时间:2016-08-30 02:23:08

标签: ios aws-sdk amazon-cognito

我有AWS Cognito用户池登录工作,我有一个联合身份池,其中用户池已连接并在控制台中指定为身份验证提供程序。

但现在我正努力在Cognito用户池和Cognito Identity Pool之间建立信任。

在下面的代码段中,您可以看到我对未经身份验证的角色的信任关系。 (经过身份验证的角色版本目前完全匹配,最终它不会,但我将它们设置为相同并赋予两个角色特权以试图使其工作)。 xxxx是预填充的CognitoIdentityId,yyyy是我的帐号,zzzz是Cognito用户池ID。

当我尝试创建信任关系并使用该应用时,我不断收到错误。这是最常见的错误:

getCredentialsWithCognito:authenticated:customRoleArn:]_block_invoke |     GetCredentialsForIdentity failed. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=8 "(null)" UserInfo={__type=InvalidIdentityPoolConfigurationException, message=Invalid identity pool configuration. Check assigned IAM roles for this pool.}]
2016-08-29 21:50:11.634 signin[7778:1222711] AWSiOSSDK v2.4.7 [Error]    AWSCredentialsProvider.m line:577 | __44-[AWSCognitoCredentialsProvider credentials]_block_invoke.352 | Unable to refresh. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=8 "(null)" UserInfo={__type=InvalidIdentityPoolConfigurationException, message=Invalid identity pool configuration. Check assigned IAM roles for this pool.}]

信任关系:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "cognito-identity.amazonaws.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxxxxx”,
              "cognito-idp.amazonaws.com:aud": "arn:aws:cognito-idp:us-east-1:yyyyyyyy:userpool/zzzzzzzzz”
            },
            "ForAnyValue:StringLike": {
              "cognito-identity.amazonaws.com:amr": "unauthenticated",
              "cognito-idp.amazonaws.com:amr": "unauthenticated"
            }
          }
        }
      ]
    }

部分问题可能是我不理解“cognito-idp.amazonaws.com:aud”的格式:“cognito-idp.amazonaws.com:aud”这一行。我怀疑我应该以某种方式更改格式或指定amazonaws.com的不同域作为aud,但我已经尝试了十几种组合并且失败了。

所以问题是:如何指定信任关系。

附属问题是: 我的想法是,如果我的用户使用用户池进行身份验证,并且正确指定了信任关系,那么我的用户将采用指定该信任的角色?或者用户是否仅以某种方式承担一个角色,如果存在多个信任关系,Cognito如何选择该角色?

1 个答案:

答案 0 :(得分:0)

信任关系政策中有三个问题,

  1. " cognito-idp.amazonaws.com:AUD"不需要,这个角色由身份池承担,用户池只是一个提供者,它不再相关
  2. " cognito-idp.amazonaws.com:AMR"不需要
  3. 如果这是经过身份验证的角色,则应该验证amr而不是未经身份验证的