【发布时间】: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