首页 > 解决方案 > 如何只允许使用 Graphene 进行白名单查询?

问题描述

看着 Graphene 提供一个公共 API,如果你天真地遵循记录的示例,那么提供一个容易受到拒绝服务攻击的 API 会相对容易,即使它们不是故意的:

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

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

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

标签: pythongraphene-python

解决方案


石墨烯中间件实际上是我会(而且我会)用于这种要求的。它是细粒度的,但有一个原因 - 整个 GraphQL 的设计都考虑到了粒度。另外,我不确定每个查询运行一次是什么意思。查询字段是最重要的,如果您想将顶级字段列入白名单,中间件非常适合。Serving over HTTP中也间接建议了这种做法——您将身份验证留给 HTTP 层(例如使用 JWT),将授权留给 GraphQL 中间件。这也是Graphene 文档中的使用示例之一。


推荐阅读