gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:06:35 26 4
gpt4 key购买 nike

我正在构建一个 .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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com