如何禁用Hasura core的schema introspection功能?
Hasura Core 禁用Schema内省的替代方案
graphql_schema_introspection 配置确实为Hasura Cloud专属功能,开源Hasura Core版本未原生支持该metadata配置项,可通过以下几种方案实现禁用非授权角色schema内省的需求:
- 反向代理层拦截
生产环境通常会在Hasura实例前部署Nginx、APISIX等反向代理服务,你可以直接在代理层匹配内省请求特征进行拦截:普通内省请求的请求体中必然包含
__schema或__type关键字,你可以针对这两个特征匹配,同时排除管理员角色的请求,避免影响自身控制台的正常使用。
以Nginx为例,可添加如下配置规则:if ($request_body ~* "__schema|__type") { # 校验请求头中的角色信息,非admin角色直接返回403 if ($http_x_hasura_role != "admin") { return 403 "Introspection is disabled for non-admin users"; } } - 自定义中间件校验
如果你不想修改代理层配置,也可以自行实现轻量的GraphQL网关中间件,所有发往Hasura的请求先经过中间件处理:- 解析请求中的GraphQL语句,判断是否包含内省相关操作
- 读取请求携带的角色信息,非admin角色的内省请求直接拒绝
该方案灵活性更高,支持自定义不同角色的拦截规则,也可针对部分内省操作做细粒度放行。
- 高版本Core原生配置
从Hasura v2.31.0版本开始,开源Core版本已新增全局内省禁用的启动参数,启动实例时添加如下环境变量即可:HASURA_GRAPHQL_DISABLE_INTROSPECTION=true
该参数会全局禁用所有非admin角色的内省权限,如果你需要针对特定角色禁用,可以配合代理层方案组合实现。
内容的提问来源于stack exchange,提问作者Alpha9
相关产品推荐
相关产品推荐

