首页 > 解决方案 > aws appsync auth 指令未按预期限制访问

问题描述

在我正在使用的 appsync api 的 graphQl 架构中,我想根据用户所属的组来限制我的用户操作。

根据文档,添加该行aws_auth(cognito_groups: ["Admins"])应将访问权限限制为仅属于“管理员”组的用户。当我从 appsync 控制台或应用程序本身运行突变时,不会发生这种情况。

我的突变如下:

type Mutation @aws_iam
@aws_cognito_user_pools {
    createItem(input: CreateItemInput!): Item
    updateItem(input: UpdateItemInput!): Item
    @aws_auth(cognito_groups: ["Admins"])
}

@aws_iam 和 @aws_cognito_user_pools 指令似乎工作正常。但任何已通过身份验证或具有 iam 角色的人仍然可以执行更新,即使他们不属于“Admins”组。

这里发生了什么?是否需要进行其他配置才能使其正常工作?

标签: aws-appsync

解决方案


只是为了进一步澄清,因为这没有很好的记录。

如果您使用单个授权提供程序并且该提供程序是 Cognito,则应始终使用该@aws_auth指令。不要使用该@aws_cognito_user_pools指令,因为如果您使用基于组的授权,它就不起作用。这在 AWS Cognito 文档中没有详细记录,并且是一个陷阱,因为 AppSync 将允许您配置此指令。

如果您使用多个授权提供商并且您使用的是 Cognito,则必须使用@aws_cognito_user_poolsAWS Cognito 文档中记录的指令。奇怪的是,基于组的授权可以正确使用@aws_cognito_user_pools,但仅在使用多个授权提供程序时才能正常工作。


推荐阅读