我最初使用默认角色设置我的身份池,并在经过身份验证的角色中添加了AWS托管AdministratorAccess策略。这个工作很好,我收到了对Cognito用户的临时证书和CRUD评估,但是我需要其他用户组并拥有不同级别的权限。首先,我在Cognito用户池中设置了一个Admin组,并为其分配了自定义的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-SDK中导入AWS,而不会造成混乱,因此我从@ aws-amplify / core导入了它。我所有的代码都是从那开始设置的。
在我的JavaScript / Angular代码中,这会从ID令牌中检索组:
user.signInUserSession.idToken.payload['cognito:groups'];
对于一个索赔,我尝试了signInUserSession.idToken.payload['cognito:groups']
,但是那也不起作用。在线信息很少,只能将cognito:groups作为声明选项,但这是行不通的。
对解决方案或故障排除有什么想法吗?
答案 0 :(得分:0)
答案很简单。我已经删除了一个身份池并创建了一个新的身份池。但是,我忘记了我需要更新用于该身份池的IAM中每个角色的身份池ID。
这意味着转到您在身份池中使用的角色,单击“信任关系”选项卡,进行编辑,并在其中显示StringEquals的地方确保您拥有此密钥cognito-identity.amazonaws.com:aud
和身份池ID作为值{ {1}}