.net - .Net Core 中可变数量的 Oauth 身份验证方案

标签 .net asp.net-core dependency-injection .net-core autofac

我正在构建一个 .NET Core 服务,该服务需要为数据库中的每个条目注册一个 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));
        }
    }

这个问题是我在调用 builder.Populate(services) 之后创建 AuthenticationBuilder 的 Oauth;所以 Autofac 不会将 OAuth 放入对象图中。

关于如何正确执行此操作的任何想法?

谢谢!

最佳答案

这里有一个如何执行此操作的示例 - https://github.com/aspnet/AuthSamples/tree/master/samples/DynamicSchemes

请记住,对于 OAuth 方案,除了调用 schemeProvider.AddScheme 和 optionsCache.TryAdd 之外,您还需要做更多的事情 - 当通过普通方法添加选项时,还有一个“postconfigure”步骤。这是类(class) - https://github.com/aspnet/Security/blob/master/src/Microsoft.AspNetCore.Authentication.OAuth/OAuthPostConfigureOptions.cs

因此您可以将类型“OAuthPostConfigureOptions>”注册到您的 DI 容器中,然后通过构造函数获取它并在将选项添加到选项缓存之前调用 OAuthPostConfigureOptions.PostConfigure。

关于.net - .Net Core 中可变数量的 Oauth 身份验证方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49787907/

相关文章:

c# - 具有相同类的两个独立单例路径的依赖注入(inject)

c# - 如何使用 IoC 注入(inject)打开的连接

c# - MSDN 帮助作为 XML 或 JSON 数据而不是 HTML 页面

c# - WP7 XNA : simple photo album

c# - 如何从封闭类型的 MethodInfo 获取开放泛型类型的 MethodInfo

c# - 无法解析设置类的依赖注入(inject)

c# - 具有 protected setter 的最小起订量属性

c# - ASP.NET Core中的异步方法问题

c# - ASP Core HttpClientFactory 模式使用客户端证书

angularjs - 依赖项是否共享?