У меня работают учетные записи пула пользователей AWS Cognito, и у меня есть пул федеративной идентификации с подключенным пулом пользователей, который указан в качестве поставщика аутентификации в консоли.
Но теперь я пытаюсь установить доверительные отношения между пулом пользователей Cognito и пулом идентификаторов Cognito.
Во фрагменте кода ниже вы можете увидеть мои доверительные отношения для неаутентифицированной роли. (Версия роли, прошедшая проверку подлинности, точно совпадает в данный момент, в конечном итоге не будет, но я сделал их одинаковыми и дал обеим ролям привилегии, чтобы попытаться увидеть, как это работает). xxxx - это предварительно заполненный CognitoIdentityId, yyyy - номер моей учетной записи, а zzzz - идентификатор пула пользователей Cognito.
Я продолжаю получать ошибки, когда пытаюсь установить доверительные отношения и использовать приложение. Вот самая частая ошибка:
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"
}
}
}
]
}
Отчасти проблема может заключаться в том, что я не понимаю формат строки «ognito-idp.amazonaws.com:aud »: «ognito-idp.amazonaws.com:aud». Я подозреваю, что мне следует каким-то образом изменить формат или указать другой домен amazonaws.com в качестве aud, но я попробовал дюжину комбинаций и потерпел неудачу.
Итак, вопрос: как определить доверительные отношения.
И дополнительный вопрос: есть ли идея, что если мой пользователь аутентифицируется с помощью пользовательского пула и если доверительные отношения указаны правильно, мой пользователь возьмет на себя роли, которые определяют это доверие? Или пользователь каким-то образом берет на себя только одну роль, и как эта роль выбирается Cognito, если существует несколько доверительных отношений?