【发布时间】:2021-05-20 07:08:22
【问题描述】:
与 REST 不同,GraphQL 只有一个端点,通常称为 /graphql。 通过将授权外包给单独的上游服务(例如,将授权外包给 Nginx / Envoy 与 Open Policy Agent 等代理)并使用路径和 HTTP 动词进行决策,我在 REST 方面有很好的经验。例如,GET /billing 路由只能由具有 JWT 角色声明“会计”的用户使用。
现在我正在寻找一种方法来适应 GraphQL。 我发现的唯一可能性是在请求正文中解释查询,例如:
body: {
query: 'query {\r\n cats {\r\n id,\r\n name\r\n }\r\n}\r\n'
}
但是,这似乎相当复杂且容易出错,因为必须外包大量知识和逻辑,特别是因为代理(分别是 OPA/其他授权解决方案)不一定具有任何 GraphQL 功能.
有没有更好的方法来可靠地识别 GraphQL 请求中请求的解析器/查询/突变/实体?客户端设置的标头和其他丰富内容不适合这里,对吧?
我将非常感谢任何方法!
【问题讨论】:
标签: graphql reverse-proxy open-policy-agent