【发布时间】:2020-11-24 14:53:51
【问题描述】:
我有一个默认授权模式设置为 Amazon Cognito 用户池 的 AWS AppSync 架构。我使用 AWS Amplify GraphQL Client 从 Web 应用程序调用此 AppSync 端点,并且连贯地,它的配置也将 Cognito 用户池作为身份验证类型:
aws_appsync_authenticationType: 'AMAZON_COGNITO_USER_POOLS'
当用户被认证时,它会按预期工作;但是(尽管涉及的 Cognito 身份池已经设置了适当的 Auth 和 Unath 角色),当网站运行一些 Amplify fetch 命令时,例如 unauthenticated(guest) 用户:
const item = await API.graphql(graphqlOperation(getItem, { id: 'my-id' }))
最终抛出错误:
"No current user"
好吧,如果我允许未经身份验证的用户,我希望它能够执行,但它只是失败了。寻找出路,我发现了一些讨论,例如:
- GitHub 问题评论here,
- 另一个Github issue,
- 或一个 SO 问题 here。
而且,以上所有建议都建议重新访问 Amplify 配置,以便将 AppSync 身份验证类型从 AMAZON_COGNITO_USER_POOLS 转换为 AWS_IAM 或 API_KEY。但是,由于某些详细原因1:
- 我想坚持
AMAZON_COGNITO_USER_POOLS身份验证类型, - 并且仍然能够以访客用户的身份获取一些 AppSync 资源,除非它们受到限制
@aws_auth装饰师之类的。
有没有可能?
1 我有更精细的控件,具体取决于用户组(管理员、普通等),在 AppSync 架构上使用 @aws_auth(cognito_groups: ["default-user-group"]) 等装饰器。所以,我需要 Cognito 用户池来使用。
【问题讨论】:
-
嘿,你有什么解决办法吗??
-
同样的问题。我的 api 要求我有 cognito pools 方法,但是在未经身份验证的情况下我将无法查询。
标签: amazon-web-services authentication amazon-cognito aws-amplify aws-appsync