如何在 Hasura 中使用 claims_map 正确映射以使 `x-hasura-allowed-roles` 字段成为数组?
How to map correctly to make `x-hasura-allowed-roles` field an array using claims_map in Hasura?
我有一个 JWT 令牌,看起来像
{
"aud": "xx",
"iss": "http://xx.com/adfs/services/trust",
"iat": 1649956864,
"exp": 1649960464,
"apptype": "xx",
"appid": "dcf6c0d8-7f3c-4904-a0c9-852c92c7624f",
"authmethod": "http://xx",
"auth_time": "2022-04-14T17:21:04.095Z",
"ver": "1.0"
}
我正在尝试通过使用 Hasura 中的 claims_map
将 appid
映射到 x-hasura-allowed-roles
字段作为数组的一项。
HASURA_GRAPHQL_JWT_SECRET: '{"jwk_url":"xx","claims_map":{"x-hasura-allowed-roles":{"path":"$.appid"},"x-hasura-default-role":{"path":"$.appid"}}}'
注意里面这部分:
"x-hasura-allowed-roles":{"path":"$.appid"}
我查询的时候会出现这个错误
invalid x-hasura-allowed-roles; should be a list of roles: parsing [] failed, expected Array, but encountered String
这是有道理的,因为 x-hasura-allowed-roles
需要是一个数组。
第一次尝试(失败)
如果我改成
"x-hasura-allowed-roles":[{"path":"$.appid"}]
当我启动 Hasura 时,我会得到错误
Fatal Error:- Environment variable HASURA_GRAPHQL_JWT_SECRET: Error in $['claims_map'][0]: parsing String failed, expected String, but encountered Object
第二次尝试(失败)
"x-hasura-allowed-roles":{"path":["$.appid"]}
Fatal Error:- Environment variable HASURA_GRAPHQL_JWT_SECRET: Error in $['claims_map'].path: parsing Text failed, expected String, but encountered Array
如何正确映射使x-hasura-allowed-roles
字段成为数组?谢谢
@Arjun Yelamanchili 在 https://github.com/hasura/graphql-engine/issues/8402
帮助创建了一张 GitHub 票
这是一个临时解决方案,我最终硬编码 x-hasura-allowed-roles
就像
HASURA_GRAPHQL_JWT_SECRET: '{"jwk_url":"xx","claims_map":{"x-hasura-allowed-roles":["dcf6c0d8-7f3c-4904-a0c9-852c92c7624f"],"x-hasura-default-role":{"path":"$.appid"}}}'
更严格。
但是,我觉得可能没有必要,因为我们将在 Hasura UI 中定义每个 appid 权限。另外,我每次使用新应用时都需要更新 HASURA_GRAPHQL_JWT_SECRET
。
我有一个 JWT 令牌,看起来像
{
"aud": "xx",
"iss": "http://xx.com/adfs/services/trust",
"iat": 1649956864,
"exp": 1649960464,
"apptype": "xx",
"appid": "dcf6c0d8-7f3c-4904-a0c9-852c92c7624f",
"authmethod": "http://xx",
"auth_time": "2022-04-14T17:21:04.095Z",
"ver": "1.0"
}
我正在尝试通过使用 Hasura 中的 claims_map
将 appid
映射到 x-hasura-allowed-roles
字段作为数组的一项。
HASURA_GRAPHQL_JWT_SECRET: '{"jwk_url":"xx","claims_map":{"x-hasura-allowed-roles":{"path":"$.appid"},"x-hasura-default-role":{"path":"$.appid"}}}'
注意里面这部分:
"x-hasura-allowed-roles":{"path":"$.appid"}
我查询的时候会出现这个错误
invalid x-hasura-allowed-roles; should be a list of roles: parsing [] failed, expected Array, but encountered String
这是有道理的,因为 x-hasura-allowed-roles
需要是一个数组。
第一次尝试(失败)
如果我改成
"x-hasura-allowed-roles":[{"path":"$.appid"}]
当我启动 Hasura 时,我会得到错误
Fatal Error:- Environment variable HASURA_GRAPHQL_JWT_SECRET: Error in $['claims_map'][0]: parsing String failed, expected String, but encountered Object
第二次尝试(失败)
"x-hasura-allowed-roles":{"path":["$.appid"]}
Fatal Error:- Environment variable HASURA_GRAPHQL_JWT_SECRET: Error in $['claims_map'].path: parsing Text failed, expected String, but encountered Array
如何正确映射使x-hasura-allowed-roles
字段成为数组?谢谢
@Arjun Yelamanchili 在 https://github.com/hasura/graphql-engine/issues/8402
帮助创建了一张 GitHub 票这是一个临时解决方案,我最终硬编码 x-hasura-allowed-roles
就像
HASURA_GRAPHQL_JWT_SECRET: '{"jwk_url":"xx","claims_map":{"x-hasura-allowed-roles":["dcf6c0d8-7f3c-4904-a0c9-852c92c7624f"],"x-hasura-default-role":{"path":"$.appid"}}}'
更严格。
但是,我觉得可能没有必要,因为我们将在 Hasura UI 中定义每个 appid 权限。另外,我每次使用新应用时都需要更新 HASURA_GRAPHQL_JWT_SECRET
。