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


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:



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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.