ServiceStack 中针对多租户的自定义 Auth 请求

Custom Auth request in ServiceStack for multi-tenancy

我已经在基于 ServiceStack 的 Web 服务应用程序中使用自定义身份验证提供程序。

我正在覆盖 Authenticate 方法,并根据多个后端租户数据库之一验证我的用户。我目前通过将 API 键与数据库字符串匹配来确定租户数据库。

public override object Authenticate(
   IServiceBase authService, 
   IAuthSession session, 
   Auth request) // <- custom object here, MyCustomAuth request
{
   // ...
}

这适用于每个应用程序都针对单个租户的情况(tenant/customer 可以构建自己的应用程序并使用该 API 密钥)。展望未来,我想构建一个多租户移动应用程序。因此无法使用 API 键方法,因为我不能期望每个用户都输入它,因此我无法确定哪个租户正在使用该应用程序。

我想更改 Auth 对象,以便我可以包含 TenantId(由用户在登录时提供)。但是,我看不到如何自定义该对象。

是否可以自定义该 Auth 对象,或者我是否必须找到替代解决方案?

您不能修改使用的 built-in Authenticate 请求 DTO,但您可以使用它的 Dictionary<string, string> Meta 属性 通过身份验证请求发送额外的元数据,例如:

client.Post(new Authenticate {
    ...
    Meta = new Dictionary<string,string> {
        {"TenantId", tenantId},
    }
}

或者,您可以在 QueryString 或 HTTP Headers 中发送附加信息,并通过以下方式访问 IRequest

var tenantId = authService.Request.QueryString["TenantId"];