【问题标题】:Owin providers in a multi tenant web application where each domain has its own providers多租户 Web 应用程序中的 Owin 提供程序,其中每个域都有自己的提供程序
【发布时间】:2016-06-24 11:08:51
【问题描述】:

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

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 启动 ConfigureAuth() 中没有可用的 HttpContext,并且我不确定如何确定在启动早期使用哪个域名...
  2. 我了解每个 Web 应用程序只运行一次 Startup,例如,在第一次访问 web1.com 后,一旦 web1.com 已设置 ConfigureAuth() 将不会再次为 web2.com 运行

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

我从哪里开始?

【问题讨论】:

  • 提供程序不是为此而构建的。您正在考虑多少个域?如果只是几个,那么您可以使用 MapWhen 之类的东西为每个域分叉管道,并为每个域提供不同的中间件。诀窍是事后重新合并管道。
  • 大约 10 个域,但将来可能更多,您知道我应该研究的任何其他中间件吗?
  • 不,这不是一个已经开发太多的领域。在某些时候,在您的应用程序中管理太复杂了,您将其外包给 Azure AAD B2C azure.microsoft.com/en-us/services/active-directory-b2c 之类的服务

标签: cookies owin multi-tenant owin-middleware


【解决方案1】:

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

例子

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

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

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

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

示例:

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

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

        });

HTH

【讨论】:

  • 不幸的是,HttpRequest 在启动时不可用,因此无法在管道中尽早确定 URL,我认为有一种方法可以稍后在请求可用时更新 cookie,但我不认为 Owin 提供程序可以在以后添加或更新,所以它似乎不会以这种方式解决
  • 提供了在 OWIN 管道中访问请求的示例。 @Yovav:请参考上面帖子中编辑的示例。
猜你喜欢
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
相关资源
最近更新 更多