【问题标题】:Variable number of Oauth Authentication Schemes in .Net Core.Net Core 中可变数量的 Oauth 身份验证方案
【发布时间】:2018-09-22 02:18:54
【问题描述】:

我正在构建一个 .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 放入对象图中。

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

谢谢!

【问题讨论】:

  • 您可以解析 IAuthenticationSchemeProvider (?) 并将您的方案直接添加到其中。
  • @Tratcher - 你能提供更多细节吗?我有点挣扎。我似乎能够添加一个身份验证方案,但我不确定如何将我的 OAuthOptions 连接到该方案。这是另一个 SO 问题,它似乎在问同样的事情 - stackoverflow.com/questions/48910070/…

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


【解决方案1】:

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

请记住,对于 OAuth 方案,您需要做的不仅仅是调用 schemeProvider.AddScheme 和 optionsCache.TryAdd - 通过普通方法添加选项时,还有一个“后配置”步骤。这是课程 - https://github.com/aspnet/Security/blob/master/src/Microsoft.AspNetCore.Authentication.OAuth/OAuthPostConfigureOptions.cs

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-23
    • 2021-10-18
    • 2018-02-23
    • 2019-06-24
    • 2021-08-27
    • 2022-09-24
    • 2019-08-31
    • 2021-03-01
    相关资源
    最近更新 更多