使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?

Posted

技术标签:

【中文标题】使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?【英文标题】:With AWS Amplify Auth and GraphQL API, how would you have some public, and some private query/mutation calls? 【发布时间】:2019-12-02 22:02:11 【问题描述】:

设置:

带有 GraphQL 的 AWS Amplify API AWS Amplify Auth w/ Cognito 用户池

假设平台的大部分内容应该可供已注销的用户访问。例如。他们应该能够阅读论坛Topics,但如果他们想发帖,他们需要登录。

我看到了一个可以使用的@auth 解析器,但是每当我尝试对my.url.amazonawscom/graphql 进行graphQL 调用以获取Topics 时,它都会显示"errorType": "UnauthorizedException"。我无法弄清楚已注销的用户如何获得对可公开访问的数据的授权。

【问题讨论】:

【参考方案1】:

AWS AppSync 最近推出了对同一 AppSync API 上的多种授权类型的支持。因此,您可以例如启用 cognito 用户池作为 API 上的授权类型,并将 API_KEY 添加为额外的授权提供程序。

在此之后,您将能够使用 @aws_api_key 指令从您的架构中选择字段,例如 getForumTopics 进行 api 密钥身份验证。 API 密钥通常被视为提供公共访问权限。

此外,Cognito 用户池和 Cognito 联合身份是独立的产品。 Cognito 联合身份确实具有未经身份验证的身份角色,您可以使用它来保护架构中的***字段,但看起来您的 API 上的身份验证类型设置为 Cognito 用户池。

【讨论】:

【参考方案2】:

在 Cognito 身份池中,您需要为未经授权的用户设置策略。转到编辑身份池,您可以看到一个可以将角色设置为未经授权的选项

【讨论】:

哦,有趣,是的,我刚刚看到启用它的设置。所以它已启用,但我是否需要在请求期间传递一些通用 JWT 令牌或标头中的任何内容?现在说“无法解析 JWT 令牌” 意思是,我可以让它与一个经过身份验证的用户的 JWT 令牌一起工作,但如果尝试使用 Postman 或 Insomnia,我无法弄清楚哪些标头用于未经身份验证的用户 对于未经身份验证的用户,不会生成 JWT 令牌。 我明白,但是对于未经身份验证的用户(例如邮递员)来说,查询的格式是什么样的。我无法实现上述查询,并希望我可以传递某种标头信息来验证未经身份验证的用户。 您能否使用 AWS API Gateway 接口来测试这些端点。请确保您在测试端点之前已将 API 部署到一个阶段。在 APi Gateway 中,希望您已经配置了 IAM Authorizer。在 Cognito 身份池中,在未经身份验证的身份部分中,选中复选框启用对未经身份验证的身份的访问

以上是关于使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?的主要内容,如果未能解决你的问题,请参考以下文章

Auth.signIn() 使用设备 - AWS Amplify 与 React-Native

模拟适用于 Android 的 AWS Amplify Auth API

AWS amplify add auth:如何在执行 amplify cli 后添加重定向登录 URI

使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?

我可以使用 aws amplify 和 @auth 装饰器将 GraphQL 突变设为私有吗?这被认为是一种安全的方法吗?

AWS Amplify Auth Login 从 React Native 上的 React Native Webview