Aws Amplify 在一个 GraphQL 中使用多个 Cognito 用户池 Api

Aws Amplify Using Multiple Cognito User Pools in One GraphQL Api

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

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

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

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

谢谢,

根据 AWS documentation,您可以使用两个不同的 Cognito 组 访问相同的 AppSync API 访问相同的 DynamoDB table以下方法非常简单;

如果您使用 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 table 使用两个不同的用户池,那么您将需要付出额外的努力才能实现这一目标。以下是步骤:

  1. 将您的两个用户池添加为额外授权 AppSync 设置中的提供商
  2. 在您的查询中使用 @aws_cognito_user_pools 指令和 架构中的突变以及 object 这些查询和突变正在尝试访问。
  3. 这是一个棘手的问题!当您尝试访问 query/mutation 解析器中的 $ctx.identity.cognitoIdentityPoolId 时,它会抛出 null。因为cognitoIdentityPoolId只包含在AWS_IAM授权header中而不包含在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,然后授予他们对 table 您的访问权限 欲望。