未登录用户的Appsync授权

时间:2018-11-07 15:38:22

标签: amazon-cognito aws-appsync

我正在Vue应用程序中使用Appsync,并设置了Cognito用户池,以便用户能够登录到我的应用程序。但是,我的应用程序中有些页面上未登录的用户应该只能查看,即:“ think:在堆栈溢出时读取答案”,但是在某些情况下,用户需要能够向其中添加评论该页面,需要登录才能对其进行编辑。

在Appsync中的API上,我已将授权设置为“ Amazon Cognito用户池”,并将默认操作设置为“允许”,但是如何使它成为非认知用户仍然可以查看页面?我应该使用哪种设置组合?

1 个答案:

答案 0 :(得分:1)

令人讨厌的是,AppSync不支持多种身份验证方法,并且您已经注意到Cognito UserPool集成要求用户必须先登录才能访问graphql端点。

有一些解决方法,但是都没有那么漂亮:

  • 部署两个版本-一个具有使用UserPools的全部功能,另一个具有使用API​​密钥(已嵌入到客户端)的开放版本
  • 亲自处理身份验证。使用IAM角色安全性进行应用同步,而不是直接连接到graphql终结点,而是在API Gateway中创建一个代理lambda,该代理lambda可以验证UserPool用户或允许没有凭据的受限访问。
  • 使用已知(例如,在您的应用程序中或从端点中)凭据在UserPool中创建无用户“用户”。然后,您有责任检查您对安全突变/查询作出响应的用户是否为用户。一种更安全地执行此操作的方法可能是添加自定义属性“ custom:insecure”,您可以在非开放端点上检查该属性。
  • 使用“查看器”模式(检查Facebook的实现)。默认情况下,使您的GraphQL模式处于打开状态(例如,已知的API密钥),并使所有查询/变异都采用viewer的第一个参数。这可能是Cognito在身份验证时返回的访问令牌。然后,每个解析器将负责确定令牌是否有效(例如cognito::getUser)或在未定义viewer的情况下允许访问。

尽管一开始听起来似乎最困难,但我还是建议我使用第一个解决方案。有多种方法可以使AppSync部署自动化,并且可以在架构中的开放内容和受保护内容之间明确区分