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

标签 graphql openid-connect auth0 directive aws-appsync

我正在从 Cognito 过渡至 Auth0 .对于我的一些 AppSync查询和突变,我已经应用了@aws_auth 指令,它可以包含一个列表 Cognito组来控制访问级别。
下面的示例显示了一个名为 createEvent 的突变。 ,仅允许位于 Cognito 中的用户组 tracker_admin 和pilot_admin,以执行此更改。
下面是一个例子:

createEvent(input: CreateEventInput!): Event
    @aws_auth(cognito_groups:["tracker_admin", "pilot_admin"])
我已经使用 OPENID_CONNECT 成功配置了一个额外的身份验证提供程序( Auth0 )并添加了指令 @aws_oidc到我的 GraphQL架构。在我的 Auth0仪表板 我已经设置了范围,当他们向我的应用程序客户端进行身份验证时,这些范围会根据用户的角色添加到用户的访问 token 中。
我的目标是更新我的架构以使用 OIDC 身份验证并将权限应用于指令,如下所示:
directive @aws_oidc(
    permissions: [String]
) on OBJECT | FIELD_DEFINITION

createEvent(input: CreateEventInput!): Event
    @aws_oidc(permissions:["create:event"])
我的 Auth0 access_token 确实有一个 "permissions"字段,其中包括用户拥有的范围列表。这些权限列表在 "identity" 的事件上下文中进入我的 lambda 解析器。下"claims" .
如何使用 @aws_oidc 的指令在模式级别完成此授权就像我现在使用的 @aws_auth 一样用于用户池 Cognito 组?

最佳答案

这已经很晚了,但是对于需要帮助使用 OIDC 设置 AppSync 的任何其他人,我在查看此博客后想出了这个:https://aws.amazon.com/blogs/mobile/graphql-security-appsync-amplify/ .以下是如何在您的 schema.graphql 中进行设置的示例。
更改 groups 的值满足您的需求,以及 groupClaim成为对您的 OIDC token 的声明以供阅读。根据需要定制操作

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

关于graphql - 如何在 Graphql 架构级别检查 AWS AppSync OIDC 指令的角色或权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64938956/

相关文章:

asp.net - AspNet.Security.OpenIdConnect 与 OAuthAuthorizationProvider

azure - 从 magic link 理解 id_token 流程

authentication - KeyCloak 应该用作我的用户的身份验证服务器吗?

android - 如何在不到处添加特定代码的情况下处理 auth0 403 错误 (Retrofit/okhttp/RxAndroid)

javascript - graphQL 解析器不等待 Web API 完成

reactjs - React Apollo 订阅中的第一个对象没有合并到以前的数据中,它实际上被删除了

reactjs - 如何使用 Apollo 从 GraphQL Mutation 设置身份验证 token cookie

asp.net - IdentityServer、客户端和用户配置文件管理

graphql - 对未知级别 GraphQL 的嵌套查询

authentication - 如何防止刷新时删除 auth0 session cookie?