首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人可以通过设置x- Hasura角色来伪造对hasura GraphQL引擎的请求吗?

有人可以通过设置x- Hasura角色来伪造对hasura GraphQL引擎的请求吗?
EN

Stack Overflow用户
提问于 2020-04-01 04:17:38
回答 1查看 1.3K关注 0票数 5

如果我正确理解,要使用JWT在hasura授权查询或突变,需要在请求本身中满足几个要求,即:

  1. JWT本身,出现在请求头中

请求头中显示的

  • x-hasura-role,Authorization: Bearer <token here> (可选)

x-hasura-role: user

  • 请求主体

中显示的实际查询或突变

代码语言:javascript
复制
myQuery {
  id
  name
  another_field
}

然后,当请求被发送到hasura端点时,hasura GraphQL引擎将尝试

  1. 验证JWT
  2. 检查请求头中设置的x-hasura-role值是否存在于jwt
  3. x-hasura-allowed-role声明中,如果满足所有条件,则GraphQL引擎将检查从x-hasura-role标头值分配的角色是否具有从请求体<代码>H 220G 221执行查询的权限。

据我理解,这意味着有人可以通过将GraphQL的值设置为JWT的x-hasura-role声明中存在的其他东西来“伪造”对hasura x-hasura-allowed-roles引擎的请求。例如,如果x-hasura-allowed-roles声明是这样的

代码语言:javascript
复制
{
  ...
    'x-hasura-allowed-roles': ['role1','role2'],
    'x-hasura-default-role': 'role1',
    'x-hasura-user-id': username
  }
}

然后,这意味着应该只分配给role1的人只能通过将请求中的x-hasura-role头设置为x-hasura-role: role2来执行仅限于x-hasura-role: role2的查询。

我的理解正确吗?如果是的话,避免这种情况的最佳方法是什么,因为这似乎是一个安全漏洞。我是否只是将jwt的x-hasura-allowed-roles声明限制在基于我的身份验证服务分配给每个用户的角色上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-01 04:58:01

您的理解似乎是正确的,而且它不是一个安全漏洞。

--我是否只是将jwt的x-hasura-allowed-roles声明限制在基于身份验证服务分配给每个用户的角色上?

完全正确。在本文档(https://hasura.io/docs/1.0/graphql/manual/auth/authentication/jwt.html)中,关键信息如下:

JWT被解码,签名被验证,然后断言用户的当前角色(如果在请求中指定)在允许的角色列表中。如果请求中未指定当前角色,则应用默认角色。

因此,重要的是,您的auth服务器发布特定于该用户的允许角色(和默认角色)列表;看起来Hasura使用此功能支持多角色用户。例如,管理员可能能够使用用户角色“登录为”,或者用户的角色在应用程序的不同上下文中可能有所不同。

关于这些领域的更具体定义:

  1. A x-hasura-default-role字段:指示该用户的默认角色,即在x-hasura-role标头未被传递时将使用的角色。
  2. A x-hasura-allowed-roles字段:用户允许的角色列表,即x-hasura-role标头的可接受值。

G 217

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60963627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档