在 AutoFac ConfigureTenant 中添加身份验证

Add Authentication inside AutoFac ConfigureTenant

我想在 .NET Core 应用程序上进行基于租户的身份验证。我正在使用 AutoFac 构建基于租户的容器。

我能够创建 ServiceCollectionPopulate 身份验证服务。但是身份验证失败并为租户获取未经授权的响应。

public static MultitenantContainer ConfigureMultitenantContainer(IContainer container)
{
    multitenantContainer.ConfigureTenant("80fdb3c0-5888-4295-bf40-ebee0e3cd8f3", containerBuilder =>
    {
        containerBuilder.RegisterType<DataService>().As<IDataService>().InstancePerDependency();
        containerBuilder.RegisterInstance(new OperationIdService()).SingleInstance();

        ServiceCollection tenantServices = new();
        tenantServices.AddAuthentication(opt =>
        {
            opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        }).AddJwtBearer(options =>
        {
            options.Authority = "https://key-cloak.cloudapp.azure.com:8443/auth/realms/test";
            options.Audience = "test";
        });
        containerBuilder.Populate(tenantServices);
    });
    
    return multitenantContainer;
}

在这篇文章的帮助下,我能够自己修复它。

MultiTenant Authentication by Michael McKenna

默认情况下,处理程序不使用默认的“.UseAuthentication”中间件注册。在您拥有有效的租户上下文之前,这些方案已在中间件构造函数中注册。由于它不支持动态注册方案 OOTB 我们需要稍微修改它。

我们将采用现有的 AuthenticationMiddleware.cs 并将 IAuthenticationSchemeProvider 注入点从构造函数移至 Invoke 方法。由于 invoke 方法是在我们注册租户服务后调用的,因此它现在可以使用所有租户特定的身份验证服务。