【问题标题】:Is Passing Tenant ID in JWT Token a good practice?在 JWT 令牌中传递租户 ID 是一种好习惯吗?
【发布时间】: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 派生它。

标签: asp.net-core multi-tenant


【解决方案1】:

我将其作为声明放入 JWT 令牌中。

您也可以在 URL 上传递它。如果您查看 Azure DevOps REST API,其中有 /{organisation}/。然后根据 URL 验证声明。

我倾向于两者都做。将它放在 URL 中可能有助于记录,如果允许,还可以匿名访问。

我正在使用 Auth0 生成令牌,老实说,支持多租户应用程序的选项很糟糕,而且无法扩展。支持用户访问具有不同权限的多个租户是一项挑战。如果我坚持使用 Auth0,我的计划是为每个客户端生成唯一角色并将用户分配给它们,然后在 JWT 令牌中包含权限和租户 ID。我将为每个租户颁发 JWT。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 2022-09-30
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多