屏蔽 JWT 自定义声明是一种好的做法吗?

Is masking JWT custom claims a good practice?

我们在 Rest API(Bank API) 身份验证中使用 JWT 令牌,具有正常的有效负载,例如:

{
  "user_id": "cdda338f-50e2-4e14-9f84-33b8a158db9f",
  "tenant_id": "cdda338f-50e2-4e14-9f84-33b8a158db9e",
  // other jwt claims
}

但是安全团队认为这是不安全的,我们应该用非直观值替换字段名称,每个应用程序环境(prd、qas、dev)都不同,如下所示:

{
  // would be user id, the key would be passed by an env var
  "4234e798fdeikfj": "cdda338f-50e2-4e14-9f84-33b8a158db9f",
  // would be tenant id, the key would be passed by an env var
  "dkfgldsjf49385r": "cdda338f-50e2-4e14-9f84-33b8a158db9e",
  // other jwt claims
}

那么应用程序必须这样做:

import TENANT_KEY from 'my-env-vars';

const tenantId = token[TENANT_KEY];

对我来说,这似乎是不必要的复杂性,因为我们不应该担心我们的令牌被用户读取,因为它不包含敏感信息。屏蔽 api 端点(将 /tenants/{id} 替换为 /dfkjsdfkjdsf/{id})毫无意义。我认为如果正确实施身份验证,攻击者就无法利用直观的 API.

由于我找不到任何关于它的文章,我想知道是否有有效的案例,是否被大公司或您自己使用,可能的好处是什么以及是否有更好的选择(JWE?)。

如果你能指出一些关于这个主题的好文章,我将不胜感激。

这不是常见的事情,也不是必需的,甚至会适得其反,因为额外的复杂性实际上可能会导致真正的安全问题。

如果安全控制实施得当(它们应该如此),默默无闻的安全性不会带来任何好处。