aws-appsync - AppSync 多重授权
问题描述
我正在使用 AppSync 的多重授权(api 密钥和 OIDC)。
我有一个名为“getStudent”的查询,默认身份验证是 API KEY,OIDC 是附加身份验证模式。
目标是让 API KEY 可以使用“getStudent”,但是,对于 OIDC,只有所有者才能检索他们自己的记录。为此,我编辑了“getStudent”的解析器映射模板:
#if( $ctx.error )
$util.error($ctx.error.message, $ctx.error.type, $ctx.result)
#else
#if($ctx.result.id == $ctx.identity.claims.get("studentid"))
$util.toJson($ctx.result)
#else
$util.unauthorized()
#end
#end
但是,虽然这适用于 OIDC,但 API KEY 不再适用。我找不到任何变量或方法来执行“如果检测到 API 密钥模式允许返回所有数据”。
这是一个已知的限制还是我遗漏了什么?
非常感激,
解决方案
如果您在 AppSync 上使用一种以上的授权类型,那么只有默认的一种适用于所有情况。必须使用适当的指令为每个 Query 和 Mutation 结果显式定义所有其他授权类型,例如:
type Query {
getPost(id: ID): Post
getAllPosts(): [Post]
@aws_api_key. // Assuming default was OpenID Connect then this is necessary for API Key mode to run Query.
}
这是来自 AWS 博客的一篇好文章。
推荐阅读
- block - 尝试在 Mailchimp 中使块元素相互接触
- oracle - Oracle 数据库使用 UTL_file 和 dbms 将数据从文本文件加载到数据库
- mysql - 选择除最后一个 id 之外的所有内容 WHERE HITS > 1000
- javascript - 从 VueJS 中的不同组件调用 v-model
- swift - 迅速; 从未使用过不可变值的初始化
- python - Redhat Apache测试页面显示而不是app,tcpdump+wget什么都不返回
- python - Selenium/Python - “如果不是”语句后跟 navigator.find_element
- python - Python pyodbc,如何返回sql控制台信息
- java - 在java中传递bigdecimal数字
- multithreading - 如何在 mac os x 中从 MXNET 获得充分的 cpu 利用率?