Registrieren Sie Authentifizierungsschemata basierend auf dem Mandanten in asp.net core 3.1

12

Derzeit habe ich eine Identity Server 4-Webanwendung mit externen Anmeldeanbietern mit Standard-Client-ID und Geheimnissen erstellt. Mein Ziel ist es jedoch, die Authentifizierungsanbieter wie Azure, Google und Facebook basierend auf dem Mandanten zu registrieren.

Ich habe die mandantenfähige SaasKit -Assembly verwendet. Hier habe ich die Middleware app.usepertenant () ausprobiert . Die UseGoogleAuthentication () -Methode ist jedoch veraltet, sodass ich mit dieser usepertenanten Middleware keine mandantenfähige Authentifizierung erreichen konnte.

Aktueller Code,

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

Der erwartete Code ist wie folgt:

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.
quelle
Vielleicht finden Sie in diesem Thread eine Antwort oder eine Problemumgehung .
Ruard van Elburg
@RuardvanElburg Vielen Dank für Ihre Antwort. Aus Ihrem vorgeschlagenen Thread können wir die bereits registrierten Schemaoptionen basierend auf dem Mandanten beim Start der Anwendung aktualisieren. Nachdem wir sie nicht aktualisieren können.
Madhan Kumar D
Möchten Sie pro Mandant unterschiedliche ClientId / ClientSecret-Einstellungen haben? Oder möchten Sie nur je nach Mieter unterschiedliche Schemata hinzufügen?
Kirk Larkin
@KirkLarkin verschiedene Schemata mit der ClientId / dem Geheimnis des jeweiligen Mieters. Wie unten, if (tenant.hasMicrosoft) {authentication.AddMicrosoftAccount (option => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan Kumar D
Gibt es hierzu Neuigkeiten?
Madhan Kumar D

Antworten:

3

Siehe die offiziellen MS-Dokumente, Authentifizierungsanbieter pro Mandant

Das ASP.NET Core-Framework verfügt nicht über eine integrierte Lösung für die Authentifizierung mit mehreren Mandanten. Während es für Kunden sicherlich möglich ist, mithilfe der integrierten Funktionen eine zu schreiben, empfehlen wir Kunden, sich zu diesem Zweck mit Orchard Core zu befassen.

RickAndMSFT
quelle
0

Da die Authentifizierung während der DI-Registrierung konfiguriert werden muss, müssen Sie während der Registrierung der Authentifizierung im Allgemeinen alle externen Anmeldeanbieter einrichten.

Während dieses Schritts müssen Sie alle Schemata hinzufügen. Ein Schema hat eine feste Client-ID / ein festes Client-Geheimnis. Daher müssen Sie Ihren IdentityServer mit allen Anmeldeinformationen des externen Anmeldeanbieters booten, die Sie für alle Ihre Clients unterstützen. Der Schemaname muss eindeutig sein.

Als Beispiel könnte Mieter A ein Schema "A_microsoft" haben, Mieter B könnte ein Schema "B_microsoft" usw. haben.

Sie können dann auf diese Authentifizierungsschemata verweisen, wenn Sie Methoden in IdentityServer aufrufen. Anmelden, Herausfordern, Anmelden usw.

Beachten Sie, dass hierfür ein vollständiger Satz von Mandanten für das Bootstrapping von IdentityServer erforderlich ist. Abhängig von Ihrem Szenario müssen Mandanten regelmäßig aktualisiert werden, wenn der IdentityServer regelmäßig aktualisiert wird, um über neue Authentifizierungsschemata informiert zu sein.


Wenn dies ein Problem ist, können Sie die registrierten Authentifizierungsschemata wahrscheinlich zur Laufzeit von IdentityServer irgendwie erweitern, aber es wird nicht einfach. Möglicherweise sind größere benutzerdefinierte Implementierungen der mit AspNetCore gelieferten Authentifizierungs-Middleware erforderlich.

InDieTasten
quelle
0

Wollen Sie Unterstützung für mehrere Authentifizierungsanbieter hinzufügen? In diesem Dokument wurde bereits angegeben, wie mehrere Authentifizierungsanbieter zum Konfigurationsdienst hinzugefügt werden. Sie müssen app.UseXXXdie Pipeline nicht mehr selbst konfigurieren

Elendil Zheng-MSFT
quelle