为什么两种方法的 AWS ID 池身份验证角色选择都失败?同时放大
Why Does AWS ID Pool Authenticated Role Selection Fail With Both Methods? Also Amplify
我最初使用默认角色设置我的身份池,并在经过身份验证的角色中添加了 AWS 管理的 AdministratorAccess 策略。这工作正常,我收到临时凭证和 CRUD 评估给 Cognito 用户,但我需要其他具有不同级别权限的用户组。首先,我在 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 作为索赔选项,但这不起作用。
有解决方案或故障排除的想法吗?
答案很简单。我删除了一个身份池并创建了一个新的。但是,我忘记了我需要更新 IAM 中与该身份池一起使用的每个角色的身份池 ID。
这意味着转到您在身份池中使用的角色,单击“信任关系”选项卡,进行编辑,然后在显示 StringEquals 的位置确保您拥有此密钥 cognito-identity.amazonaws.com:aud
和您的身份池 ID 作为值 us-west-2:e8340b.....
我最初使用默认角色设置我的身份池,并在经过身份验证的角色中添加了 AWS 管理的 AdministratorAccess 策略。这工作正常,我收到临时凭证和 CRUD 评估给 Cognito 用户,但我需要其他具有不同级别权限的用户组。首先,我在 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 作为索赔选项,但这不起作用。
有解决方案或故障排除的想法吗?
答案很简单。我删除了一个身份池并创建了一个新的。但是,我忘记了我需要更新 IAM 中与该身份池一起使用的每个角色的身份池 ID。
这意味着转到您在身份池中使用的角色,单击“信任关系”选项卡,进行编辑,然后在显示 StringEquals 的位置确保您拥有此密钥 cognito-identity.amazonaws.com:aud
和您的身份池 ID 作为值 us-west-2:e8340b.....