Asp.net core 在JWT令牌中传递租户ID是一种良好的做法吗?

Asp.net core 在JWT令牌中传递租户ID是一种良好的做法吗?,asp.net-core,multi-tenant,Asp.net Core,Multi Tenant,我正在构建一个多租户web应用程序,其中我将为所有租户提供一个应用程序和一个数据库 我一直在阅读关于为我的REST请求/响应将租户ID从服务器传递到客户端和viceversa的不同技术,似乎更适合我的技术是在JWT令牌中传递tennat ID,因为我不会为租户提供不同的域,而在X-tenant-ID中传递它似乎不安全,因为任何人都可以更改它(任何关于此的信息都将不胜感激) 那么,在JWT令牌中传递租户id是一种好的做法吗?除了另一种选择(在X-tenant-id头中传递租户id)之外,还有更好的

我正在构建一个多租户web应用程序,其中我将为所有租户提供一个应用程序和一个数据库

我一直在阅读关于为我的REST请求/响应将租户ID从服务器传递到客户端和viceversa的不同技术,似乎更适合我的技术是在JWT令牌中传递tennat ID,因为我不会为租户提供不同的域,而在X-tenant-ID中传递它似乎不安全,因为任何人都可以更改它(任何关于此的信息都将不胜感激)


那么,在JWT令牌中传递租户id是一种好的做法吗?除了另一种选择(在X-tenant-id头中传递租户id)之外,还有更好的方法吗?

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

您还可以在URL上传递它。如果您查看Azure DevOps REST API,它有/{Organization}/在那里。然后根据URL验证声明

我倾向于两者兼而有之。将其放在URL中可能有助于日志记录,如果允许,还可以进行匿名访问


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

,因为任何人都可以更改它
。。。JWT的任何部分都不能在服务器没有发现的情况下被篡改。至于你的客户是否能看到租户信息,那是另一回事。我指的是,如果使用X-tenant-ID头,它可能会被更改。当从客户端向服务器发出请求时,恶意用户可能会对其进行篡改。你是说标头的其他部分可能会被更改吗?@TimBiegeleisen OP提到了两个选项:包括在JWT中或作为客户HTTP标头包括。OP说JWT不能被篡改是正确的,但自定义HTTP头(X-TENANT-ID)可以被篡改。我不是安全专家,但如果必须公开租户ID,我宁愿将其放入JWT中,原因与您提到的相同。如果不在JWT中,则必须进行交叉检查,以确保当前用户可以访问提供的租户ID。如果每个用户只能是一个租户的成员,则可以跳过租户ID并从用户ID派生。