【问题标题】:Aws Amplify Using Multiple Cognito User Pools in One GraphQL ApiAws Amplify 在一个 GraphQL Api 中使用多个 Cognito 用户池
【发布时间】:2020-12-22 11:06:24
【问题描述】:

我是 AWS Amplify 的新手,我正在尝试制作简单的项目。

我有两个不同的前端(反应)项目。其中一个用于博客读者,另一个用于编辑。对于这两个应用程序,我想使用相同的 DynamoDB 表(并使用 graphql api)。但我想为每个项目使用不同的用户池。我该如何实现?

我正在阅读这篇文章 - https://medium.com/@fullstackpho/aws-amplify-multi-auth-graphql-public-read-and-authenticated-create-update-delete-1bf5443b0ad1

我知道 AWS AppSync 支持多种授权类型,例如 cognito、api key ... 但是它支持两种认知类型吗?

谢谢,

【问题讨论】:

  • 你是指 cognito group 还是 cognito user_pool by cognito type?

标签: reactjs amazon-web-services graphql aws-amplify aws-appsync


【解决方案1】:

根据 AWS documentation,您可以使用两个不同的 Cognito 组通过以下方式访问同一个 AppSync API 访问同一个 DynamoDB 表,这些方式非常简单;

如果你使用aws_auth 指令

type Query {
  getPosts:[Post!]! 
  @aws_auth(cognito_groups: ["Bloggers", "Readers"])
}

如果你使用aws_cognito_user_pools 指令

type Query {
  getPosts:[Post!]!
  @aws_api_key @aws_cognito_user_pools(cognito_groups: ["Bloggers", "Readers"])
}

现在,如果您特别希望为同一个 API 和 DynamoDB 表使用两个不同的用户池,那么您将不得不付出更多努力来实现这一点。步骤如下:

  1. 将您的两个用户池添加为附加授权 供应商在您的 AppSync 设置中。
  2. 使用@aws_cognito_user_pools 指令处理您的查询和 架构中的突变以及这些查询和突变试图访问的对象。
  3. 这是一个棘手的问题!当您尝试在查询/突变解析器中访问 $ctx.identity.cognitoIdentityPoolId 时,它会将您抛出 null。因为cognitoIdentityPoolId 仅包含在AWS_IAM 授权标头中,而不包含在AWS_COGNITO_USER_POOLS [Ref.] 中。但是,您仍然可以从$ctx.identity.claims 中的iss 字段中获取用户池ID,它看起来类似于https://cognito-idp.us-xxxx-x.amazonaws.com/us-xxxx-X_XxxXxxXXus-xxxx-X_XxxXxxXX 是您的用户池 ID,您必须以某种方式对其进行解析。
  4. 解析用户池 ID 后,您可以根据 Cognito 池 ID,然后授予他们访问您的表的权限 渴望。

【讨论】:

  • 两个用户池都必须是附加授权提供者吗?或者可以一个是默认的身份验证提供者,另一个是附加的?
猜你喜欢
  • 2020-04-05
  • 2020-05-28
  • 2018-03-25
  • 2021-04-26
  • 2020-05-22
  • 2022-01-25
  • 2019-08-26
  • 2022-01-11
  • 2019-06-02
相关资源
最近更新 更多