屏蔽 JWT 自定义声明是一种好习惯吗?
Posted
技术标签:
【中文标题】屏蔽 JWT 自定义声明是一种好习惯吗?【英文标题】:Is masking JWT custom claims a good practice? 【发布时间】:2021-10-30 02:00:21 【问题描述】:我们在我们的 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 ?)。
如果你能指出一些关于这个主题的好文章,我也将不胜感激。
【问题讨论】:
这是一个很好的问题,但我建议将其移至security.stackexchange.com,这样会更符合主题。 Here 是 security.stackexchange 上问题的链接 【参考方案1】:这不是常见的事情,没有必要,甚至会适得其反,因为额外的复杂性实际上可能会导致真正的安全问题。
如果安全控制措施实施得当(而且应该实施),默默无闻的安全不会带来任何好处。
【讨论】:
我们不需要与 OAuth 相关的参考资料或更深层的原因吗?以上是关于屏蔽 JWT 自定义声明是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章