Registra schemi di autenticazione basati su tenant in asp.net core 3.1


12

Attualmente, ho creato un'applicazione Web di Identity Server 4 con provider di accesso esterni con ID client e segreti predefiniti. Ma il mio obiettivo è quello di registrare i provider di autenticazione come Azure, Google, Facebook in base al tenant.

Ho usato l' assemblaggio multi-tenancy SaasKit , qui ho provato il middleware app.usepertenant () . Ma il metodo UseGoogleAuthentication () è obsoleto, quindi non ho potuto ottenere l'autenticazione multi-tenant utilizzando questo middleware per uso permanente.

Codice attuale,

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

Il codice previsto è come di seguito,

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


Forse puoi trovare una risposta o una soluzione alternativa in questa discussione .
Ruard van Elburg,

@RuardvanElburg grazie per la risposta, dal thread suggerito possiamo aggiornare le opzioni di schemi già registrate in base all'inquilino all'avvio dell'applicazione. Dopo non possiamo aggiornarli.
Madhan Kumar D

Vuoi avere impostazioni ClientId / ClientSecret diverse per tenant? Oppure vuoi solo aggiungere schemi diversi in base all'inquilino?
Kirk Larkin, il

@KirkLarkin schemi diversi con il clientId / secret dei rispettivi inquilini. Come sotto, if (tenant.hasMicrosoft) {authentication.AddMicrosoftAccount (option => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan Kumar D

Qualche aggiornamento a questo proposito?
Madhan Kumar D,

Risposte:


3

Consulta i documenti ufficiali MS, i provider di autenticazione per tenant

Il framework ASP.NET Core non ha una soluzione integrata per l'autenticazione multi-tenant. Sebbene sia certamente possibile per i clienti scriverne uno, utilizzando le funzionalità integrate, si consiglia ai clienti di esaminare Orchard Core per questo scopo.


0

Poiché l'autenticazione deve essere configurata durante la registrazione DI, durante la registrazione dell'autenticazione sarà necessario impostare tutti i provider di accesso esterni in generale.

Durante questo passaggio, è necessario aggiungere tutti gli schemi. Uno schema ha un ID client / segreto fisso, quindi è necessario avviare il bootstrap di IdentityServer con tutte le credenziali del provider di accesso esterno, supportate per tutti i client. Il nome dello schema deve essere univoco.

Ad esempio, l'inquilino A potrebbe avere uno schema "A_microsoft", l'inquilino B potrebbe avere uno schema "B_microsoft", ecc.

È quindi possibile fare riferimento a tali schemi di autenticazione quando si chiamano i metodi in IdentityServer. SignIn, Challenge, SignOut ecc.

Tenere presente che ciò richiederà il bootstrap di IdentityServer un set completo di tenant. A seconda del proprio scenario, se i tenant vengono aggiornati regolarmente, saranno necessari anche riavvii regolari di IdentityServer per conoscere i nuovi schemi di autenticazione.


Se questo è un problema, probabilmente puoi in qualche modo aumentare gli schemi di autenticazione registrati durante il runtime di IdentityServer, ma non sarà facile. Potrebbe richiedere implementazioni personalizzate più grandi del middleware di autenticazione fornito con AspNetCore.


0

Vuoi dire che vuoi aggiungere il supporto per più provider di autenticazione? Questo documento ha già specificato come aggiungere più provider di autenticazione nel servizio di configurazione. Non è più necessario utilizzarlo app.UseXXXper configurare da soli la pipeline

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.