ServiceStack中的自定义身份验证请求,用于多租户

时间:2015-01-27 10:59:30

标签: authentication servicestack

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

我重写了Authenticate方法,并针对多个后端租户数据库中的一个验证了我的用户。我目前通过将API密钥与数据库字符串匹配来确定租户数据库。

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

当每个应用程序用于单个租户时(租户/客户可以构建自己的应用程序并使用该API密钥),此方法有效。展望未来我想构建一个多租户移动应用程序。因此,不能使用API​​密钥方法,因为我不能指望每个用户输入它,因此我无法确定哪个租户正在使用该应用程序。

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

无论如何都要自定义Auth对象,还是我必须找到替代解决方案?

1 个答案:

答案 0 :(得分:2)

您无法修改所使用的内置Authenticate请求DTO,但您可以使用其Dictionary<string, string> Meta属性通过Authenticate请求发送其他元数据,例如:

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

或者,您可以在QueryString或HTTP标头中发送其他信息,并通过以下方式访问IRequest

var tenantId = authService.Request.QueryString["TenantId"];
相关问题