【问题标题】:Multitenancy in ASP.NET Core 2.0+ASP.NET Core 2.0+ 中的多租户
【发布时间】:2018-08-21 00:40:41
【问题描述】:

背景: 我想在 ASP.NET Core 中开发一个多租户应用程序,并且一直在研究 Ben Fosters Saaskit 库,它似乎为多租户应用程序中的常见问题提供了很好的解决方案。

问题: SaasKit 有一个 UsePerTenant 方法,该方法非常适合根据当前租户对每个请求执行不同的操作。

我的目标是使用UsePerTenant 方法与通过依赖注入注入的不同IOptions 对象相结合。这可以在身份验证中间件中使用,例如

AddAuthentication().AddCookie(..).AddOpenIdConnect(...)

在 Startup.cs 的ConfigureServices 方法中配置

public class Startup
{
    // Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }

    // Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
        ...
    }
}

我无法让 ASP.NET 2.0+ 中的身份验证中间件在每个请求中使用不同的 IOptions 对象,因为 Startup.cs 文件中的 ConfigureServices 方法仅在每次应用程序启动时运行一次,而 UsePerTenant 方法应该在为 ASP.NET 管道中的每个传入/传出请求运行的 Configure 方法中使用。

问题: 如何根据当前租户动态改变ConfigureServices方法中的cookie和OpenID Connect选项?

【问题讨论】:

  • 目前作为 SaasKit 库中的拉取请求的可能解决方案 github.com/saaskit/saaskit/pull/96
  • 1.创建一个服务 IUserAuthenticationManager,2. 使其成为一个单例,其中包含一个 IHTTPAccessor,3. 创建一个访问它的属性,它将从 HTTPCurrent 上下文解析您的用户 ID。 4. 使用该 userId 为您创建访问规则

标签: c# asp.net-mvc asp.net-core-mvc multi-tenant saaskit


【解决方案1】:

以下 PR 为上述问题提供了解决方案。 https://github.com/saaskit/saaskit/pull/96

PR 现已与“master”分支合并。

尚未合并(2018 年 11 月)

【讨论】:

  • 我在 2016 年 7 月 18 日之后在 master 分支上看不到任何提交。
【解决方案2】:

我找到了一种为任何类型的 ASP.NET Core 选项(包括 cookie 或 openID Connect)获取每个租户选项的好方法。我已将其封装到一个名为 Finbuckle.MultiTenant 的框架中。

基本上可以归结为如下所示的设置:

services.AddMultiTenant().
            WithInMemoryStore()).
            WithRouteStrategy().
            WithPerTenantOptionsConfig<CookieAuthenticationOptions>((o, tenantContext) => o.Cookie.Name += tenantContext.Id);

如果您有兴趣,请查看我的此处了解更多信息:https://www.finbuckle.com/MultiTenant

【讨论】:

  • 此解决方案可以与 IdentityServer4 一起使用吗?
  • @Sampath,对于身份验证选项是的,因为 IS4 在后台使用正常选项。对于数据,它更复杂——如果您使用 IdentityServer4 的 ASP.NET Identity 插件,那么对于用户数据来说是的。配置和操作数据会更难——为它们更改 EF 插件需要做很多工作,但可以做到。
  • 感谢您的回复。我正在使用 ASP.net 身份 + EF Core。对于 API,我使用的是 .Net Core Web API2。我认为我们可以管理身份服务器多租户部分。问题是为 OIDC 配置 API。我的系统每个客户端都有一个数据库,每个客户端都有自己的域。
  • @Sampath Per tenant OpenID Connect 选项受支持。查看finbuckle.com/multitenant 的项目网页以查看文档。如果您有任何问题,请在 github 中创建一个问题。 -画了
猜你喜欢
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
相关资源
最近更新 更多