Zarejestruj schematy uwierzytelniania oparte na dzierżawie w asp.net core 3.1

12

Obecnie utworzyłem aplikację internetową serwera tożsamości 4 z zewnętrznymi dostawcami logowania z domyślnym identyfikatorem klienta i kluczami tajnymi. Ale moim celem jest zarejestrowanie dostawców uwierzytelniania, takich jak Azure, Google, Facebook w oparciu o najemcę.

Użyłem zestawu wielodostępnego SaasKit , tutaj wypróbowałem oprogramowanie pośrednie app.usepertenant () . Ale metoda UseGoogleAuthentication () jest przestarzała, więc nie mogłem uzyskać uwierzytelnienia dla wielu dzierżawców przy użyciu tego oprogramowania pośredniego.

Aktualny kod,

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

Oczekiwany kod jest jak poniżej,

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);
 });

Madhan Kumar D.
źródło
Być może znajdziesz odpowiedź lub obejście tego wątku .
Ruard van Elburg
@RuardvanElburg dzięki za odpowiedź, z sugerowanego wątku możemy zaktualizować już zarejestrowane opcje schematów w oparciu o dzierżawę podczas uruchamiania aplikacji. Po tym, jak nie możemy ich zaktualizować.
Madhan Kumar D
Czy chcesz mieć różne ustawienia ClientId / ClientSecret dla każdego najemcy? A może chcesz dodać tylko inne schematy oparte na najemcy?
Kirk Larkin
@KirkLarkin różne schematy z identyfikatorem / kluczem klienta najemcy. Tak jak poniżej, jeśli (tenant.hasMicrosoft) {authentication.AddMicrosoftAccount (opcja => {option.ClientId = "clientid"; Option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan kumar D
Czy to ma jakieś aktualizacje?
Madhan Kumar D

Odpowiedzi:

3

Zobacz oficjalne dokumenty MS, dostawców uwierzytelnienia na najemcę

Framework ASP.NET Core nie ma wbudowanego rozwiązania do uwierzytelniania wielu dzierżawców. Chociaż klienci mogą napisać jedną z nich, korzystając z wbudowanych funkcji, zalecamy klientom sprawdzenie w tym celu Orchard Core .

RickAndMSFT
źródło
0

Ponieważ uwierzytelnianie musi zostać skonfigurowane podczas rejestracji DI, będziesz musiał ogólnie skonfigurować wszystkich zewnętrznych dostawców logowania podczas rejestracji uwierzytelnienia.

Podczas tego kroku musisz dodać wszystkie schematy. Schemat ma ustalony identyfikator klienta / klucz tajny, więc musisz bootstrapować swój serwer tożsamości przy użyciu wszystkich poświadczeń zewnętrznego dostawcy logowania, które obsługujesz dla wszystkich swoich klientów. Nazwa schematu musi być unikalna.

Na przykład najemca A może mieć schemat „A_microsoft”, najemca B może mieć schemat „B_microsoft” itp.

Następnie możesz odwoływać się do tych schematów uwierzytelniania podczas wywoływania metod w IdentityServer. Logowanie, wyzwanie, logowanie itp.

Należy pamiętać, że będzie to wymagać przeładowania IdentityServer pełnego zestawu najemców. W zależności od scenariusza, jeśli dzierżawcy są regularnie aktualizowani, konieczne będzie także regularne ponowne uruchamianie serwera IdentityServer, aby mieć świadomość nowych schematów uwierzytelniania.


Jeśli jest to problem, prawdopodobnie możesz w jakiś sposób rozszerzyć zarejestrowane schematy uwierzytelniania w czasie wykonywania IdentityServer, ale nie będzie to łatwe. Może to wymagać większych niestandardowych implementacji oprogramowania pośredniego uwierzytelniania dostarczanego z AspNetCore.

InDieTasten
źródło
0

Czy masz na myśli, że chcesz dodać obsługę wielu dostawców uwierzytelniania? W tym dokumencie już określono sposób dodawania wielu dostawców uwierzytelniania w usłudze konfiguracji. Nie trzeba app.UseXXXjuż używać do samodzielnego konfigurowania potoku

Elendil Zheng-MSFT
źródło