【问题标题】:aws appsync auth directive not limiting access as expectedaws appsync auth 指令未按预期限制访问
【发布时间】:2020-04-08 19:26:12
【问题描述】:

在我正在使用的 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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      一般来说,您应该避免同时使用 @aws_auth@aws_cognito_user_poolsaws_iam,因为它们的行为略有不同 (see docs here)。

      如果您想限制对updateItem 的访问,同时仍允许任何经过IAM 身份验证的用户访问createItem,那么您可以使用:

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

      将指令放在类型上意味着身份验证配置对该类型中的所有字段都有效。将指令放在字段上使其仅适用于该字段。

      【讨论】:

        猜你喜欢
        • 2020-11-18
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        • 2021-04-14
        • 1970-01-01
        • 2012-08-09
        • 1970-01-01
        相关资源
        最近更新 更多