.Net核心中Oauth身份验证方案的可变数量
我正在构建一个.NET核心服务,它需要为数据库中的每个条目注册OAuth身份验证方案。除了.NET的DI之外,我还使用Autofac 问题是为了知道如何添加Oauth方案,我需要能够访问数据库。这是我试过的-.Net核心中Oauth身份验证方案的可变数量,.net,asp.net-core,dependency-injection,.net-core,autofac,.net,Asp.net Core,Dependency Injection,.net Core,Autofac,我正在构建一个.NET核心服务,它需要为数据库中的每个条目注册OAuth身份验证方案。除了.NET的DI之外,我还使用Autofac 问题是为了知道如何添加Oauth方案,我需要能够访问数据库。这是我试过的- public IServiceProvider ConfigureServices(IServiceCollection services) { var builder = new ContainerBuilder(); var authBuild
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var builder = new ContainerBuilder();
var authBuilder = services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "OAuth1";
})
.AddCookie();
builder.Populate(services);
var container = builder.Build();
CreateAuths(authBuilder, container).Wait();
return new AutofacServiceProvider(container);
}
private async Task CreateAuths(AuthenticationBuilder authBuilder, IContainer container)
{
var dbService = container.Resolve<IDatabaseService>();
var things = await dbService.GetAllThings().ConfigureAwait(false);
foreach (var thing in things)
{
authBuilder.AddOAuth(thing.Name, CreateOAuthOptionsForThing(thing));
}
}
公共IServiceProvider配置服务(IServiceCollection服务)
{
var builder=new ContainerBuilder();
var authBuilder=services.AddAuthentication(选项=>
{
options.DefaultAuthenticateScheme=CookieAuthenticationDefaults.AuthenticationScheme;
options.defaultsignnscheme=CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme=“OAuth1”;
})
.AddCookie();
建造商。填充(服务);
var container=builder.Build();
CreateAuths(authBuilder,容器).Wait();
返回新的AutofacServiceProvider(容器);
}
专用异步任务CreateAuths(AuthenticationBuilder authBuilder,IContainer容器)
{
var dbService=container.Resolve();
var things=await dbService.GetAllThings().ConfigureAwait(false);
foreach(事物中的事物)
{
AddOAuth(thing.Name,createOAuthooptionsforthing(thing));
}
}
问题是,在调用builder.Populate(services)之后,我正在为AuthenticationBuilder创建OAuth;因此Autofac不会将OAuth放入对象图中
关于如何正确地做到这一点,有什么想法吗
谢谢 这里有一个这样做的例子- 请记住,对于OAuth方案,除了调用schemeProvider.AddScheme和optionCache.TryAdd之外,还需要做更多的工作-当通过普通方法添加选项时,还有一个“后配置”步骤。这是课程-
因此,您可以将类型“OAuthPostConfigureOptions”注册到DI容器中,然后通过构造函数获取它,并在将选项添加到选项缓存之前对选项调用OAuthPostConfigureOptions.PostConfigure。您可以解析IAAuthenticationSchemeProvider(?)并将您的方案直接添加到其中。@Tratcher-您能提供更多详细信息吗?我有点挣扎。我似乎能够添加一个身份验证方案,但我不确定如何将我的OAuthOptions连接到该方案。这是另一个问题,似乎在问同样的问题-