通过 AWS AppSync GraphQL API 使用多种授权类型

Posted

技术标签:

【中文标题】通过 AWS AppSync GraphQL API 使用多种授权类型【英文标题】:Using multiple authorization types with AWS AppSync GraphQL APIs 【发布时间】:2020-12-11 10:09:37 【问题描述】:

This blog post 展示了如何在 graphql 转换中为模型和字段设置多种授权类型。

假设我有一个@model Blog

type Blog @model 
   id: ID!
   adminUserId: String
   name: String!
   posts: [Post] @connection(keyName: "byBlog", fields: ["id"])

使用此 shcema 将自动生成以下突变/查询; createBlog updateBlog deleteBlog getBlog listBlogs

我希望 createBlogupdateBlogdeleteBlog 具有授权类型 @aws_iam。 我希望getBloglistBlogs 拥有我的默认授权类型@aws_cognito_user_pools

如何在我的schema.graphql 中定义它? 我无法直接在突变/查询上设置授权类型,因为它们没有在我的schema.graphql 文件中定义。

我可以直接在云中生成的完整模式 (AWS AppSync > API Name > Schema) 中设置身份验证类型,因为这里所有查询/突变都已定义。但是每次我运行amplify push 时都会重写此架构。

一定有更好的办法吗?

【问题讨论】:

【参考方案1】:

仅供参考,我解决了。答案是 auth 指令。

此架构将允许 cognito(我的默认身份验证)只读,而 iam 可以做所有事情。这正是我想要的。

type Blog @auth(rules: [ allow: private, provider: iam, operations: [read, create, update, delete] ,  allow: private, operations: [read] ]) @model 
  id: ID!
  adminUserId: String
  name: String!
  posts: [Post] @connection(keyName: "byBlog", fields: ["id"])


【讨论】:

以上是关于通过 AWS AppSync GraphQL API 使用多种授权类型的主要内容,如果未能解决你的问题,请参考以下文章

通过 AWS AppSync 中的突变更新 GraphQL 数据时出错

如何通过 AWS AppSync 客户端将保存字符串的变量传递给 GraphQL 查询?

我们可以在不使用 GraphQL 的情况下在项目中实施 AWS-Appsync 吗?

如何从命令行向 AWS AppSync 发送 GraphQL 查询?

AWS AppSync GraphQL 读取策略没有任何效果

AWS AppSync - 从 AppSync 控制台运行时的 GraphQL 查询超时