如何在 Graphql 架构级别检查 AWS AppSync OIDC 指令的角色或权限

Posted

技术标签:

【中文标题】如何在 Graphql 架构级别检查 AWS AppSync OIDC 指令的角色或权限【英文标题】:How to check roles or permissions on AWS AppSync OIDC directive at the Graphql schema level 【发布时间】:2021-03-04 10:18:03 【问题描述】:

我正在从Cognito 过渡到Auth0。对于我的一些AppSync 查询和突变,我应用了@aws_auth 指令,它可以包含Cognito 组的列表来控制访问级别。

下面的示例显示了一个名为createEvent 的突变,它只允许位于Cognito 组tracker_admin 和pilot_admin 中的用户执行此突变。

这是一个例子:

createEvent(input: CreateEventInput!): Event
    @aws_auth(cognito_groups:["tracker_admin", "pilot_admin"])

我已经成功地使用Auth0 配置了一个额外的身份验证提供程序(OPENID_CONNECT),并将指令@aws_oidc 添加到我的GraphQL 架构中。在我的Auth0 仪表板中,我设置了范围,当用户使用我的应用程序客户端进行身份验证时,这些范围会根据用户的角色添加到用户的访问令牌中。

我的目标是更新我的架构以使用 OIDC 身份验证并将权限应用于指令,如下所示:

directive @aws_oidc(
    permissions: [String]
) on OBJECT | FIELD_DEFINITION

createEvent(input: CreateEventInput!): Event
    @aws_oidc(permissions:["create:event"])

我的Auth0 access_token 确实有一个"permissions" 字段,其中包括用户拥有的范围列表。这些权限列表在"claims""identity" 的事件上下文中进入我的lambda 解析器。

我如何使用 @aws_oidc 的指令在架构级别完成此授权,就像我目前对用户池 Cognito 组使用 @aws_auth 一样?

【问题讨论】:

【参考方案1】:

这已经很晚了,但是对于需要帮助使用 OIDC 设置 AppSync 的其他人,我在查看此博客后想出了这个:https://aws.amazon.com/blogs/mobile/graphql-security-appsync-amplify/。以下是如何在您的 schema.graphql 中进行设置的示例

groups 的值更改为您需要的值,并将groupClaim 更改为您要读取的OIDC 令牌的声明。根据需要定制操作

type Foo
  @model
  @auth(
    rules: [
      
        allow: groups
        groups: ["ADMIN", "USER"]
        operations: [create, update, delete, read]
        provider: oidc
        groupClaim: "role"
      
    ]
  ) 
  id: ID!
  anotherId: ID!

【讨论】:

以上是关于如何在 Graphql 架构级别检查 AWS AppSync OIDC 指令的角色或权限的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Amplify 中更改我的 GraphQL 架构时如何防止丢失生产数据?

如何在 AWS AppSync GraphQL 架构上处理多个 @auth 指令?

在将 aws cdk 与 appsync 一起使用时,如何将突变添加到 graphql 架构并防止部署失败?

如何在部署前从@aws-cdk/aws-appsync 检索 schema.graphql 文件

如何从 Apollo Server 端点获得完整的 GraphQL 架构?

如何在 Graphql 和 AWS Cognito 中查询已登录用户的数据