如何在 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 文件