使用 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