首页 > 解决方案 > 为什么 AWS ID 池身份验证角色选择在这两种方法中都失败?也放大

问题描述

我最初使用默认角色设置身份池,并在经过身份验证的角色中添加了 AWS 托管 AdministratorAccess 策略。这很好用,我收到了 Cognito 用户的临时凭证和 CRUD 评估,但我需要其他具有不同权限级别的用户组。首先,我在 Cognito 用户池中设置了一个管理员组,并为其分配了自定义 fullAdmin IAM 角色,其中包括 AdministratorAccess。

当我在身份池身份验证角色选择中使用这两种方法时,这将失败。我正在使用 AWS 控制台。错误是:

NotAuthorizedException: Unauthenticated access is not supported for this identity pool

对于角色解析,我想使用拒绝。

如果我选择将默认身份验证角色与 AdministratorAccess 策略一起使用的选项,那么它可以工作,我具有管理员访问权限,但这意味着它无法识别我的规则或令牌方法。那很不好。

我认为我的代码有效,因为默认方法有效,但不确定。我的代码是否必须不同才能使用规则或令牌来获取用户组?

也许我只有这个问题:

我正在使用 AWS Amplify 获取当前用户会话,其中包括访问和 id 令牌。

Auth.currentCredentials()

文档推荐 AWS.CognitoIdentityCredentials。可能cognito:groups在规则中使用声明或使用令牌方法不起作用,因为身份池无法读取会话属性。对象可能不同。我一直在尝试设置 AWS.CognitoIdentityCredentials 来测试它,但到目前为止这在我的代码中不起作用。AWS 无法从 AWS-sdk 导入而不会造成混乱,因此我从 @aws-amplify/core 导入它。我所有的代码都是从那里设置的。

在我的 JavaScript / Angular 代码中,它从 ID 令牌中检索组:

user.signInUserSession.idToken.payload['cognito:groups'];

对于我尝试过的索赔,signInUserSession.idToken.payload['cognito:groups']但这也不起作用。网上的少量信息仅提供 cognito:groups 作为声明选项,但这不起作用。

有关解决方案或故障排除的任何想法?

标签: amazon-web-servicesamazon-cognitoaws-amplify

解决方案


答案很简单。我删除了一个身份池并创建了一个新的。但是,我忘记了我需要更新与该身份池一起使用的 IAM 中每个角色的身份池 ID。

这意味着转到您在身份池中使用的角色,单击信任关系选项卡,编辑,并在其中显示 StringEquals 确保您拥有此密钥cognito-identity.amazonaws.com:aud和您的身份池 ID 作为值us-west-2:e8340b.....


推荐阅读