【发布时间】:2020-06-10 05:25:25
【问题描述】:
我正在构建一个多租户 Web 应用程序,其中我将为所有租户提供 1 个应用程序和 1 个数据库。
我一直在阅读有关将租户 ID 从服务器传递到客户端的不同技术,反之亦然以用于我的 REST 请求/响应,似乎更适合我的方法是在 JWT 令牌中传递租户 ID,因为我不会为我的租户使用不同的域,并且在 X-TENANT-ID 中传递它似乎不安全,因为任何人都可以更改它(非常感谢任何关于此的信息)。
那么,在 JWT Token 中传递租户 ID 是一种好习惯吗?除了另一种选择(在 X-TENANT-ID 标头中传递租户 ID)之外,还有更好的方法吗?
【问题讨论】:
-
because anyone could change it... no 部分 JWT 可以被篡改,而服务器不会发现它。至于您的客户是否能看到租户信息,那就是另外一回事了。 -
好吧,我指的是如果使用 X-TENANT-ID 标头可以更改它。当从客户端向服务器发出请求时,它可能被恶意用户篡改。
-
你是说标题的其他部分可以改变吗?
-
@TimBiegeleisen OP 提到了两个选项:包括在 JWT 中或作为客户 HTTP 标头包括在内。 OP 说 JWT 不能被篡改是正确的,但是自定义 HTTP 标头(X-TENANT-ID)可以被篡改。
-
我不是安全专家,但如果必须公开租户 ID,我更愿意将其放在 JWT 中,原因与您提到的相同。如果它不在 JWT 中,则必须进行一些交叉检查以确保当前用户可以访问提供的租户 ID。如果每个用户只能是一个租户的成员,您可以跳过租户 ID 并从用户 ID 派生它。