Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Net核心中Oauth身份验证方案的可变数量_.net_Asp.net Core_Dependency Injection_.net Core_Autofac - Fatal编程技术网

.Net核心中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

我正在构建一个.NET核心服务,它需要为数据库中的每个条目注册OAuth身份验证方案。除了.NET的DI之外,我还使用Autofac

问题是为了知道如何添加Oauth方案,我需要能够访问数据库。这是我试过的-

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连接到该方案。这是另一个问题,似乎在问同样的问题-