在 AutoFac ConfigureTenant 中添加身份验证
Add Authentication inside AutoFac ConfigureTenant
我想在 .NET Core 应用程序上进行基于租户的身份验证。我正在使用 AutoFac 构建基于租户的容器。
我能够创建 ServiceCollection
和 Populate
身份验证服务。但是身份验证失败并为租户获取未经授权的响应。
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 方法是在我们注册租户服务后调用的,因此它现在可以使用所有租户特定的身份验证服务。
我想在 .NET Core 应用程序上进行基于租户的身份验证。我正在使用 AutoFac 构建基于租户的容器。
我能够创建 ServiceCollection
和 Populate
身份验证服务。但是身份验证失败并为租户获取未经授权的响应。
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 方法是在我们注册租户服务后调用的,因此它现在可以使用所有租户特定的身份验证服务。