多租户Web应用程序中的Owin提供程序,其中每个域都有自己的提供程序

时间:2016-06-24 11:08:52

标签: cookies owin multi-tenant owin-middleware

我正在尝试一个解决方案,其中一个Web应用程序正在为多个域提供服务,对于每个域我想配置自己的提供程序,使用app id和外部提供程序的机密,我希望基于当前域名从数据库中读取cookie域提供商信息,例如:

switch (currentDomainName)
{
case "web1.com": load cookie domain and providers information for web1.com ...
case "web2.com": load cookie domain and providers information for web2.com ...
...
}

我面临两个主要问题:

  1. 我在Owin Startup ConfigureAuth()中没有可用的HttpContext,我不知道如何确定在Startup上使用的域名...
  2. 我知道Startup每个Web应用程序只运行一次,例如,在第一次访问web1.com之后,一旦web1.com已经设置了,它就不再为web2.com运行了ConfigureAuth()< / LI>

    我想知道我是否可以覆盖一些Owin方法并使其非静态...或者可能找到一种方法以不同的方式实现它(但我仍然喜欢使用Owin)

    我从哪里开始?

1 个答案:

答案 0 :(得分:0)

您可以获取请求网址,然后在数据库中查找以查看与域相关的客户是什么。可能有一个表列出了该域的身份提供者

实施例

TenantDomains
*************
TenantId      URL ......
tenant1       https://tenant1.company.com
tenant2       https://tenant2.company.com

IdProviders
***********
TenantId       ProviderIds       ......
tenant1        Custom, Social
tenant2        Social

为了便于阅读,这里使用名称而不是标识符。但是,方法仍然保持不变。

您可以在中间件中执行上述所有查找,然后使用Environment中的值,然后根据之前做出的数据或决策设置管道。

示例:

您可以从OWIN Context访问传入的请求,并从Owin上下文的请求本身执行HttpRequest上的所有操作。

        app.MapWhen(req => req.Request.Headers.ContainsKey("Authorization"), apiAuth =>
        {
            // do anything that matches this request
            apiAuth.UseBearerAuthentication(new BearerAuthenticationOptions());

        });

HTH