У меня есть ASP. NET Core 3.1 приложение, которое использует Identity для аутентификации пользователей. Я хотел бы настроить Identity для разрешения внешнего входа в систему от разных провайдеров, таких как Facebook и Twitter.
У меня есть несколько внешних провайдеров входа в систему, которые хранятся в базе данных. Доступ к этим записям можно получить с помощью сервиса IAuthProvider
.
Когда приложение настроено с использованием метода ConfigureServices()
, я хочу разрешить экземпляр IAuthProvider
, чтобы получить все доступные записи из базы данных, а затем добавить необходимых провайдеров входа в систему.
Ниже приведен мой код, в котором я пытаюсь решить проблему с экземпляром IAuthProvider
в методе ConfigureServices()
. Возможно, есть лучший способ настроить или отложить настройку поставщиков на более поздний срок, но не знаете, как и где настроить сервер.
Как создать экземпляр 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
}
}