当前位置: 首页 > 知识库问答 >
问题:

Aws在一个GraphQL API中使用多个Cognito用户池进行放大

罗韬
2023-03-14

我是AWS放大器的新成员,我正在尝试制作简单的项目。

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

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

我知道AWS AppSync支持多种授权类型,如认知、应用编程接口密钥...但是它支持两种认知类型吗?

谢谢

共有1个答案

牟嘉
2023-03-14

根据AWS文档,您可以使用两个不同的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\u cognito\u user\u pools指令处理模式中的查询和变异以及这些查询和变异试图访问的对象
  3. 这是一个棘手的问题!当您尝试访问$ctx时。身份cognitoIdentityPoolId在查询/变异解析器中,它将抛出null。因为cognitoIdentityPoolId仅包括在AWS_IAM授权头中,而不包括在AWS_COGNITO_用户池中。但是,您仍然可以从$ctx中的iss字段获取用户池ID。身份声明,它看起来像https://cognito-idp.us-xxxx-x.amazonaws.com/us-xxxx-X_XxxXxxXX。这us-xxxx-X_XxxXxxXX是您的用户池ID,您必须以某种方式对其进行解析
  4. 解析用户池ID后,您可以根据Cognoto池ID筛选用户,然后授予他们对所需表的访问权

 类似资料:
  • 有人知道我们是否可以增加1000s用户池的限制吗?

  • 我试图使用Cognito用户池控制台创建一个用户(我正在设置用户名和临时密码的值),但我一直收到这个错误。 属性不符合架构:生日:数字不能超过10个字符(服务:AWSCognitoIdentityProviderService;状态代码:400;错误代码:InvalidParameterException;请求ID:98f3de9e-5ce3-11e7-98e8-9d0c69d31df9) 使用无

  • 我们的设置是: 创建电子邮件/密码帐户或登录Facebook 我能够创建两个成功独立于彼此与AWS Cognito。 我想解决的问题是,如果用户先有一个电子邮件/密码帐户,然后单击Facebook登录,我希望他们链接并提示用户确认他们有权访问该电子邮件/密码帐户。 一旦用户确认以后,他们应该能够登录Facebook或通过电子邮件/密码登录来访问和调整相同的帐户。 Facebook用户在Cognit

  • 我正在为已经使用AWS Cognito用户池的Angular2应用程序实现Facebook身份验证。 使用ngx-facebook(https://github.com/zyra/ngx-facebook),我已经设法使用Facebook和Cognito身份池验证了自己: 但现在:我如何将Facebook用户与现有的用户池集成? 登录和注册用户池的功能已经到位,最佳解决方案显然是为脸谱网用户使用现

  • 我刚刚开始和AWS一起工作,学习AWS。我正在使用AWS移动中心的服务,到目前为止已经设置了登录 一切正常,现在我正在处理忘记密码和更新密码。 问题是,AWS设置忘记密码的方式是: 首先输入用户名,然后在用户输入用户名后,AWS通过SMS向与该用户名关联的电话号码发送验证码。 这是一个问题,因为这意味着任何人都可以输入任何用户名,并会发送一条短信,导致我的短信付款增加,老实说,这看起来很草率。 我

  • 我目前正在原型化一个由AWS物联网支持的应用程序,允许用户控制他们的设备。 我的想法是使用AWS Cognito对用户进行身份验证,并通过IAM角色限制对该用户拥有的特定设备(主题)的访问。 我可以看到,您可以将角色分配给一组用户,这将非常好,但允许的组数上限非常低(25)。 我是错过了一个技巧,还是这是对认知的限制?如果是这样,处理这种情况的最佳方法是什么? 提前谢谢。