如果我理解正确,要使用 JWT 在 hasura 中授权查询或突变,请求本身需要满足一些要求,即:
Authorization: Bearer <token here> x-hasura-role: user myQuery {
id
name
another_field
}
Run Code Online (Sandbox Code Playgroud)
当请求被发送到 hasura 端点时,hasura GraphQL 引擎将尝试
x-hasura-role请求头中设置的值是否存在于x-hasura-allowed-rolejwt的声明中x-hasura-roleheader的值分配的角色是否有权限从请求体执行查询据我了解,这意味着有人可以通过将 的值设置为 JWT 声明中x-hasura-role存在的其他内容来“伪造”对 hasura GraphQL 引擎的请求x-hasura-allowed-roles。例如,如果x-hasura-allowed-roles索赔是这样的
{
...
'x-hasura-allowed-roles': ['role1','role2'],
'x-hasura-default-role': 'role1',
'x-hasura-user-id': username
}
}
Run Code Online (Sandbox Code Playgroud)
那么这意味着应该只分配给角色 1 的人可以执行仅限于角色 2 的查询,只需x-hasura-role将请求中的标头设置为x-hasura-role: role2
我的理解正确吗?如果是,避免这种情况的最佳方法是什么,因为它似乎是一个安全漏洞?我是否只是x-hasura-allowed-roles将 jwt的声明限制为仅根据我的身份验证服务分配给每个用户的角色?