如何在 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_mapappid 映射到 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