Зарегистрируйте схемы аутентификации на основе клиента в asp.net core 3.1.

12

В настоящее время я создал веб-приложение Identity server 4 с внешними провайдерами входа в систему с идентификатором клиента и секретами по умолчанию. Но моя цель - зарегистрировать провайдеров аутентификации, таких как Azure, Google, Facebook, на основе арендатора.

Я использовал многопользовательскую сборку SaasKit , здесь я попробовал промежуточное программное обеспечение app.usepertenant () . Но метод UseGoogleAuthentication () устарел, поэтому я не смог добиться многопользовательской аутентификации с использованием этого промежуточного программного обеспечения usepertenant.

Текущий код,

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
   .AddMicrosoftAccount(option =>
     {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
     });

Ожидаемый код, как показано ниже,

var authentication = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);

if (tenant.hasMicrosoft)
{
   authentication.AddMicrosoftAccount(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

if (tenant.hasGoogle)
{
   authentication.AddGoogle(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

authentication.AddCookie( options =>
 {
    options.SlidingExpiration = true;
    options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
 });

Мадхан Кумар Д
источник
Возможно, вы можете найти ответ или обходной путь в этой теме .
Руард ван Элбург
@RuardvanElburg, спасибо за ваш ответ, из предложенной вами ветки мы можем обновить уже зарегистрированные опции схем на основе клиента при запуске приложения. После того, как мы не можем их обновить.
Мадхан Кумар Д
Хотите иметь разные настройки ClientId / ClientSecret для каждого арендатора? Или вы хотите добавить только разные схемы на основе арендатора?
Кирк Ларкин
@KirkLarkin разные схемы с соответствующим идентификатором клиента / секретом арендатора. Как и ниже, if (tenant.hasMicrosoft) {authentication.AddMicrosoftAccount (option => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Мадхан Кумар Д
Любое обновление по этому поводу?
Мадхан Кумар Д

Ответы:

3

См. Официальные документы MS, провайдеры аутентификации на каждого арендатора

Платформа ASP.NET Core не имеет встроенного решения для мультитенантной аутентификации. Несмотря на то, что клиенты, конечно, могут написать его, используя встроенные функции, мы рекомендуем клиентам изучить Orchard Core для этой цели.

RickAndMSFT
источник
0

Поскольку аутентификация должна быть настроена во время регистрации DI, вам нужно будет настроить всех внешних провайдеров входа в систему в целом во время регистрации аутентификации.

На этом этапе вам необходимо добавить все схемы. Схема имеет фиксированный идентификатор клиента / секретный ключ, поэтому вам нужно загрузить IdentityServer со всеми учетными данными внешнего провайдера входа, которые вы поддерживаете для всех своих клиентов. Название схемы должно быть уникальным.

Например, у арендатора A может быть схема «A_microsoft», у арендатора B может быть схема «B_microsoft» и т. Д.

Затем вы можете обратиться к этим схемам аутентификации при вызове методов в IdentityServer. Войти, Challenge, SignOut и т. Д.

Имейте в виду, что для этого потребуется загрузка IdentityServer полного набора арендаторов. В зависимости от вашего сценария, если клиенты регулярно обновляются, потребуется также регулярный перезапуск IdentityServer, чтобы быть в курсе новых схем аутентификации.


Если это проблема, вы, вероятно, можете каким-то образом дополнить зарегистрированные схемы аутентификации во время выполнения IdentityServer, но это будет непросто. Это может потребовать более крупных пользовательских реализаций промежуточного программного обеспечения аутентификации, поставляемого с AspNetCore.

InDieTasten
источник
0

Вы хотите добавить поддержку нескольких провайдеров аутентификации? В этом документе уже указано, как добавить несколько поставщиков аутентификации в службу конфигурации. Больше не нужно использовать app.UseXXXдля настройки конвейера самостоятельно

Элендиль Чжэн-MSFT
источник