首页 文章

ASP.NET Core 2.0中的多租户

提问于
浏览
4

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

Problem: 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 方法应该在运行的 Configure 方法中使用对于ASP.NET管道中的每个传入/传出请求 .

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

2 回答

  • 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

  • 2

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

    PR已经与“主”分支合并了 .

    它还没有合并(2018年11月)

相关问题