Aws Amplify 在一个 GraphQL Api 中使用多个 Cognito 用户池
Posted
技术标签:
【中文标题】Aws Amplify 在一个 GraphQL Api 中使用多个 Cognito 用户池【英文标题】:Aws Amplify Using Multiple Cognito User Pools in One GraphQL Api 【发布时间】: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? 【参考方案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 表使用两个不同的用户池,那么您将不得不付出更多努力来实现这一点。步骤如下:
-
将您的两个用户池添加为附加授权
供应商在您的 AppSync 设置中。
使用
@aws_cognito_user_pools
指令处理您的查询和
架构中的突变以及这些查询和突变试图访问的对象。
这是一个棘手的问题!当您尝试在查询/突变解析器中访问 $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_XxxXxxXX
。 us-xxxx-X_XxxXxxXX
是您的用户池 ID,您必须以某种方式对其进行解析。
解析用户池 ID 后,您可以根据
Cognito 池 ID,然后授予他们访问您的表的权限
渴望。
【讨论】:
两个用户池都必须是附加授权提供者吗?或者可以一个是默认的身份验证提供者,另一个是附加的?以上是关于Aws Amplify 在一个 GraphQL Api 中使用多个 Cognito 用户池的主要内容,如果未能解决你的问题,请参考以下文章
带有 AWS Amplify 的 GraphQL - 如何启用对查询的排序
如何防止更新 AWS Amplify GraphQL API 的 ownerField?
AWS Amplify GraphQL Schema 导致错误
如果我有登录用户的访问令牌,如何使用 AWS Amplify GraphQL API?