目前,我正在将Auth0与Hasura一起用于一个React项目,在身份验证方面我遇到了一些困惑。
Hasura文档声明您可以将x-hasura-role传递给您的请求,以指定用户角色。这对于测试来说很好,因为我可以轻松地在角色之间跳转,而且使用Hasura控制台也很容易。
但是,我不希望这个选项可以用于生产,那么任何用户都可以在请求头中指定x-hasura-role=admin,并且他们将拥有完全的管理访问权限。我假设这些标志将在生产中被禁用,并且这些角色将从签名的JWT键中取出,并带有Hasura声明。
我想做的是让Hasura从我的Authorization JWT令牌中提取“角色”(Authorization),它在解码时如下所示:
{
"https://hasura.io/jwt/claims": {
"x-hasura-role": "admin",
"x-hasura-default-role": "user",
"x-hasura-allowed-roles": [
"admin",
"user"
],
"x-hasura-user-id": "auth0|42a80d679dc71e396ce57cd1"
},
...
}所以我有两个问题:
x-haura-role这样的变量吗?如果是这样的话,有什么合适的方法来处理这个问题呢?x-hasura-role并通过我的阿波罗客户端传递吗?再说一遍,我不知道这在生产中是如何工作的,因为任何人都可以设置x-hasura-role,为什么Hasura不能把它从我添加的"Hasura声明“中提取出来呢?
我觉得我在这里漏掉了一条信息,谢谢!
发布于 2022-06-14 18:31:32
因此,如果我将x-hasura-role设置为我想要的角色,而不是使用x-hasura-default-role,它就会像预期的那样工作。这很奇怪,因为只有当没有可用的x-hasura-default-role时,才应该使用x-hasura-role,除非我读错了:https://hasura.io/docs/latest/graphql/core/auth/authentication/jwt/#the-spec
无论如何,现在我正在设置x-hasura-default-role并获得所期望的行为。
发布于 2022-06-15 13:12:40
我想你已经接近全貌了,但仍然缺少一些细节。
假设您也没有传递x-hasura-admin-secret头(除了测试和分析查询之外,您不应该这样做),如果可以根据需要在Hasura注册的JWT机密正确地验证JWT,将从JWT读取角色。
在令牌有效负载中签名的x-hasura-default-role是您已经看到的用于计算GraphQL请求的角色。
但是,x-hasura-allowed-roles头的要点是,它可以更改请求将在下执行的角色,只要指定的角色也在已签名的令牌中的数组中。
图像中有以下标记:
{
x-hasura-default-role: "member",
x-hasura-allowed-role: ["member", "teammate"]
}在这种情况下,可以将x-hasura-role头设置为teammate,然后使用不同的权限规则对请求进行评估。
这不是一个安全特性,因为一旦用户获得了一个令牌,如果他们是智能的,他们可以使用任何一个角色发出请求。因此,只有在完全满意用户访问角色的情况下,您才应该将角色放在x-hasura-allowed-roles数组中。
但是,在某些应用程序上下文中,这可能会有所帮助,因为您希望根据用户在应用程序中的位置评估一组不同的权限规则。例如:如果它们在团队页面上,则应用程序代码可以代表它们发送标头,因此可以访问一组简化的权限,这些权限对于该上下文是有意义的。
https://stackoverflow.com/questions/72611694
复制相似问题