gpt4 book ai didi

asp.net-core - 如何使用自定义服务在 ASP.NET Core 3.1 中注册身份验证提供程序?

转载 作者:行者123 更新时间:2023-12-05 07:13:35 24 4
gpt4 key购买 nike

我有一个使用身份验证用户身份的 ASP.NET Core 3.1 应用程序。我想配置身份以允许来自 Facebook 和 Twitter 等不同提供商的外部登录。

我在数据库中存储了多个外部登录提供程序。可以使用 IAuthProvider 服务访问这些记录。

当使用 ConfigureServices() 方法配置应用程序时,我想解析 IAuthProvider 的实例以从数据库中获取所有可用记录,然后添加所需的登录提供商。

下面是我的代码,我正在努力研究如何在 ConfigureServices() 方法中解析 IAuthProvider 实例。也许有更好的方法来配置或推迟配置提供程序,但不确定如何以及在何处配置服务器。

如何创建 IAuthProvider 实例并正确配置身份提供商?

public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options =>
{
options.UseMySql(Configuration.GetConnectionString("MySql"));
});
services.AddScoped<IAuthProvider, AuthProvider>();
// other services

var providers = // Here I somehow need to resolve an instance of IAuthProvider;

AuthenticationBuilder authBuilder = services.AddAuthentication();

foreach (var provider in providers.All())
{
if (provider.Name == ExternalLoginProvider.Facebook)
{
authBuilder.AddFacebook(options =>
{
options.AppId = provider.AppId;
options.AppSecret = provider.Secret;
});
}

if (provider.Name == ExternalLoginProvider.Twitter)
{
authBuilder.AddTwitter(options =>
{
options.ConsumerKey = provider.AppId;
options.ConsumerSecret = provider.Secret;
});
}
// Other providers as needed per the records found in the database
}
}

最佳答案

我看到你的代码已经注册了 IAuthProvider 的实现,你可以简单地调用 servcice.GetService() 来获取 AuthProvider 的实例。根据这个 document,我不明白你以这种方式拥有不同的 authprovider 的意思您可以像这样在链中添加不同的身份验证提供程序:

services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });

为什么要单独添加它们?

编辑:

如果你只是想获取IAuthProvider的实例,试试

var serviceProvider = services.BuildServiceProvider();
var provider = serviceProvider.GetService<IAuthProvider>();

关于asp.net-core - 如何使用自定义服务在 ASP.NET Core 3.1 中注册身份验证提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60104974/

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