我怎样才能只允许使用 Graphene 的白名单查询?

How can I only allow whitelisted queries with Graphene?

查看 Graphene 以提供 public API,如果您天真地遵循文档中的示例,那么提供一个容易受到攻击的 API 会相对容易拒绝服务攻击,即使它们不是故意的:

出于这个原因,我倾向于说保护 public GraphQL API 的最简单方法是在生产环境中建立一个查询白名单。如果查询不在白名单中,并且用户不是管理员,则拒绝查询。

所以,这就引出了一个问题:如何在 Graphene 中维护一个查询白名单并拒绝不在该白名单中的查询?一些想法:

因此,在不尝试深入研究猴子修补石墨烯的情况下,我遇到了同样的问题:如何使用石墨烯实现查询白名单? (或者,我应该如何保护生产 Graphene 服务器免受过于昂贵的查询?)

Graphene 中间件实际上是我会(并且我确实)用于此类需求的。它是细粒度的,但这是有原因的——整个 GraphQL 在设计时就考虑到了细粒度。另外,我不确定您所说的 运行 每个查询一次 是什么意思。查询字段很重要,如果您的意思是要将顶级字段列入白名单,中间件非常适合。 Serving over HTTP - you leave the authentication to the HTTP layer (e.g. using JWT) and authorization to the GraphQL middleware. This is also one of the usage examples from Graphene documentation.

中也间接建议了这种做法