Laden...

Gibt es Beispiele zum Vorgehen bei hybrider Authentifizierung via IdentityServer4?

Erstellt von Papst vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.385 Views
P
Papst Themenstarter:in
441 Beiträge seit 2014
vor 6 Jahren
Gibt es Beispiele zum Vorgehen bei hybrider Authentifizierung via IdentityServer4?

Hi,
ich stehe vor der (für mich) Herausforderung eine Angular Website mit mehreren Identitätsprovidern als Login Möglichkeit zu konzeptionieren.
In der ASP.NET Core Welt habe ich leider noch nicht so viel gemacht und deshalb versucht mich etwas über die Dokus zu hangeln und bin dabei auf IdentityServer4 gestoßen und glaube, dass dieser genau das leisten könnte was ich brauche:
Für die App soll es möglich sein, sich aus einem bestimmten AzureAD und mittels einer anderen Authentifizierungsart (evtl. ASP.NET Core Identity) zu authentifizieren.

Bevor ich zur konkreten Frage komme erst einmal mein Verständnis - nicht, dass hier schon das Problem liegt:
-> IdentityServer4 wird als eigene Applikation ausgeführt, meine (und ggf. andere Apps) nutzen diesen Dienst zum Authentifizieren der Nutzer
-> In meiner App konfiguriere ich "lediglich" dass die Benutzer sich gegen meine Instanz von IdentityServer4 authentifizieren müssen.
-> In IdentityServer4 konfiguriere ich die möglichen Loginmechanismen in der Startup Klasse (hier gebe ich Tenant etc. für das Azure AD an)

Ich habe leider kein Beispiel und auch in der Doku keinen Hinweis gefunden, wie ich IdentityServer dazu bekomme die Möglichkeit zu haben gegen mehrere UserStore's zu authentifizieren.
Liegt hier vielleicht der Fehler und ich brauche für jeden Store (bzw. jeden Identitätsprovider) einen einen IdentityServer?
Wo läge dann der Vorteil gegenüber einer direkten Authentifizierung?

An Beispielen bin ich leider nicht so arg fündig geworden, die offiziellen habe ich mir die ganzen Konfigurationen angeschaut - muss aber gestehen, dass ich zwar denke die Konfiguration zu verstehen, aber sie auf Anhieb noch nicht nachbauen könnte.
Gibt es irgendwo ein Beispiel für meinen Anwendungsfall?

T
415 Beiträge seit 2007
vor 6 Jahren

Ich bin mir nicht ganz sicher, ob es das ist was du suchst: aber im Grunde ist es doch nichts anderes als das was in der OWIN Pipeline von ASP.NET stattfindet. Du fügst dort die unterschiedlichen Authentication Provider hinzu, wie Google, Facebook oder eben ein AD. So wie in diesem Beispiel: Link

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

der IdentityServer ist in weiten Teilen eigentlich vom genauen IdentityProvider komplett unabhängig.

Denn eigentlich wird dort mit dem ClaimsPrincipal und Claims gearbeitet ist, wie es sich halt komplett durch ASP.NET Core hindurch zieht.

Das einzige woran ich mich erinnere, dass Store-bezogen wäre - ist erst mal nur der sogenannte "ProfileService", der sicher auch nicht all zu kompliziert wird, da es sicher ein Claim gibt, dass deiner Implementierung verraten würde wer denn nun gerade Claims verteilt halt. ("iss")

Würde dir an der Stelle empfehlen dir einfach mal ein paar Beispiele anzuschauen (Die Doku ist echt gut, wenn man sich mal einen Überblick verschafft hat)

LG

P
Papst Themenstarter:in
441 Beiträge seit 2014
vor 6 Jahren

Danke für eure Tipps, mein Problem ist bei den ganzen Dokus die ich mittlerweile gewälzt habe, dass immer nur ein Provider beschrieben ist. Aller Versuche mehr als einen Provider zu finden haben mich bisher zu IdentityServer geführt.

Für Azure AD Login fand ich dies sehr hilfreich: https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/authenticate
Vermutlich macht es Sinn, einfach mal einen Prototypen zu implementieren und zu schauen wie sich alles verhält.

Die Frage die mir bleibt ist, was genau ist der Sinn des IdentityServer4, wenn ich doch alles über Middleware abbilden kann?

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

muss hier gerade doch noch mal etwas los werden. Hab deinen Beitrag wohl beim ersten Mal nicht genau durchgelesen (und Azure AD auch erst jetzt gegoogelt)

  1. Wie mir scheint brauchst du nicht mal einen IdentityServer
    -> Den brauchst du nämlich eigentlich nur, wenn du selbst Mechanismen á la "OpenId" anbieten möchtest

  2. AzureAD sieht mir nach deinem verlinkten Beispiel so aus, als ob es auch einfach OpenId anbietet
    -> AspNetCore beherrscht OpenId "out of the box" - ergo - lässt du dir bei Projekterstellung einfach eine App mit "individuellen Accounts" erstellen - machst noch ein bisl OpenId-Konfiguration et voilá - User können sich entweder auf deiner Seite mit Benutzername/Passwort anmelden, oder auf "Login with Azure" drücken und gut ist.
    (Da das Beispiel für AzureAD nicht ganz so vollständig wirkt - würde ich dir empfehlen es mit den diversen Beispielen für Facebook abzugleichen - das ist ein bisl ausführlicher)

Das würde auch ein wenig deine Verwirrung erklären - der IdentityServer hat nämlich die Aufgabe Funktionalität wie AzureAD, Google, Facebook & Co. - nur halt eben selfmade anzubieten, was bei dir nicht mal benötigt wird.

LG

16.830 Beiträge seit 2008
vor 6 Jahren

Aus Erfahrung: auch beim Zusammenarbeiten mit Azure AD verwende den IdentityServer.
Nimm den Identity Server für die Identitätsverwaltung und AzureAD für die Authentifizierung als Provider.

IdentityServer hat nämlich die Aufgabe Funktionalität wie AzureAD, Google, Facebook & Co.

Nicht direkt. Eher: Nein.
IdentityServer hat schon ein etwas anderen Fokus.

AzureAD, Google und Facebook sind (hier betrachtet) Authentication-Provider, die anhand von Credentials ein Token für die Authentifizierung bereitstellen.
Es geht hier nicht um die Authorisierung! Die Authorisierung braucht man nachher, um die APIs anzusprechen.

Der IdentityServer bietet nun einen Endpunkt an, an dem ein Authentication Provider angedockt werden kann oder bietet optional auch eine Cookie Middleware für eine simple FormsAuthentication an.
Am Ende wird jedoch geht es jedoch beim IdentityServer nicht primär um die Authentifizierung, sondern um die Authorisierung.

AzureAD hat nun im Gegensatz zu Google und Facebook aber auch Authorization Features und auch die Möglichkeit externe Provider (aber nur die, die Microsoft definiert) anzudocken.

Und das unterscheidet das Ganze dann schon sehr.
Du kannst aber durchaus natürlich auch mit dem IdentityServer selbst als Provider für Deine Authentifizierung agieren, sodass andere Deiner Identitätsvalidierung vertrauen, wie es quasi Google, Facebook und im Unternehmensfokus Azure AD machen.

P
Papst Themenstarter:in
441 Beiträge seit 2014
vor 6 Jahren

Zusammengefasst, nur um sicher zu gehen:
Ich würde IdentityServer nutzen um eine Authentifizierung gegenüber zwei Identitätsprovidern zu machen, nämlich AzureAD und ASP.NET Core Identity, welche im Identityserver selber gehostet wird(?).
IdentityServer übernimmt dann auch die Authorisierung (natürlich nach der Authentifizierung) und meine App spricht ausschließlich mit dem IdentityServer.

@Abt:
Hast du ein gutes Beispiel oder einen Einstieg parat, den du empfehlen könntest?
Ich würde sonst denke ich mit dem von t2t geposteten Beispiel (https://github.com/IdentityServer/IdentityServer4.Quickstart.UI) anfangen, google gegen lokale Identitäten ersetzen und darauf dann eine Beispiel App andocken.

16.830 Beiträge seit 2008
vor 6 Jahren

ASP.NET Core Identity ist nochmal was anderes, da gehts um MemberShip, ProfileProbver etc etc.
Dafür gibts auch eine Erweiterung für den IdentityServer (IdentityServer4.AspNetIdentity) ich bin davon aber kein Fan.

Im Prinzip machst Du es so:

  • Identity Server ist Dein Host.
  • Azure AD ist Dein Authentication Provider, den Du in den Identity Server einbindest
  • Google Faceboon und Co auch nur ein Provider

Ich bin derzeit selbst dabei ein Beispiel Projekt für uns intern zu basteln, basierend auf diesem Repository: https://github.com/TahirNaushad/Fiver.Security.AuthServer

Damit hast Du eigentlich die Grundbasis für Dein Vorhaben.
Da brauchste mein Beispiel vermutlich gar nicht.

PS: die Dokumentation gegenüber .NET Core 2.0 und ASP.NET Core 2.0 ist nicht gut, in meinen Augen. Manche Dinge auch eben noch gar nicht dokumentiert (zB. die neue Middelware für Authentication für ASP.NET Core 2.0).
Auch ist der IdentityServer4 mit dem aktuellen NuGet Paket nicht stable auf .NET Core 2.0; hier muss man auf das aktuelle Alpha Paket zurückgreifen oder noch mit .NET Core 1.1 leben.

P
Papst Themenstarter:in
441 Beiträge seit 2014
vor 6 Jahren

Danke schon mal, ich versuche das einmal als Prototyp zu implementieren und werde mich sicher noch einmal mit Problemen melden 😉