C # ASP.NET Single Sign-On-Implementierung

75

Ich bin beauftragt, Single Sign-On für unsere Kunden im Rahmen unserer nächsten Version zu implementieren. Der Fluss existiert wie folgt:

  1. Der Benutzer meldet sich mit einer Schüler-ID / einem Passwort, die ihm von der Schule zur Verfügung gestellt wurden, beim Hauptportalsystem seiner Schule an.
  2. Der Benutzer klickt auf den Link zum Produkt meines Unternehmens.
  3. Der Benutzer wird automatisch zur Dashboard-Seite weitergeleitet, als hätte er sich gerade über das Anmeldeformular auf unserer Website angemeldet.

Daher gibt es zwei Mechanismen, mit denen ein Benutzer auf unserer Website authentifiziert werden kann:

  1. Besuchen Sie die Homepage unseres Produkts und melden Sie sich mit der E-Mail / dem Passwort an, die wir in unserem lokalen System speichern.
  2. Verwenden der einmaligen Anmeldung, bei der sich der Schüler bereits mit einer Schüler-ID und einem Kennwort beim Hauptsystem der Schule angemeldet hat.

Wenn die Implementierung unseres Produkts in ASP.NET erfolgt (im Gegensatz zu Java / Ruby), sollten wir CAS, JOSSO oder ein anderes Single Sign-On-Produkt eines Drittanbieters verwenden? Oder steht einer .NET-Umgebung etwas zur Verfügung, das für uns als .NET-Unternehmen einfacher wäre?

Adam Levitt
quelle
Wenn es sich um das vom Identifier Provider initiierte Modell handelt, kann dieser Artikel helfen: IdP-initiierte asp.net-Webanwendungen
Peter

Antworten:

54

Es gibt mehrere Optionen zum Implementieren von SSO für eine .NET-Anwendung.

Schauen Sie sich die folgenden Tutorials online an:

Grundlagen von Single Sign on , Juli 2012

http://www.codeproject.com/Articles/429166/Basics-of-Single-Sign-on-SSO

GaryMcAllisterOnline: ASP.NET MVC 4, ADFS 2.0 und STS-Integration von Drittanbietern (IdentityServer2) , Januar 2013

http://garymcallisteronline.blogspot.com/2013/01/aspnet-mvc-4-adfs-20-and-3rd-party-sts.html

Der erste verwendet ASP.NET Web Forms, während der zweite ASP.NET MVC4 verwendet.

Wenn Ihre Anforderungen die Verwendung einer Drittanbieterlösung ermöglichen, sollten Sie auch OpenID in Betracht ziehen. Es gibt eine Open-Source-Bibliothek namens DotNetOpenAuth .

Weitere Informationen finden Sie im MSDN-Blogbeitrag Integrieren Sie OpenAuth / OpenID mithilfe von Universal Providern in Ihre vorhandene ASP.NET-Anwendung .

Hoffe das hilft!

Shahed C - MSFT
quelle
1
Danke für die Hilfe! Ich frage mich jedoch, ob es nicht bereits Single Sign-On-Server gibt, mit denen ich dies möglicherweise tun könnte, anstatt meine eigene Implementierung zu schreiben. Wie Yales CAS oder so?
Adam Levitt
3
Vielleicht fehlt mir etwas, aber der erste Link scheint ziemlich nutzlos zu sein. Sie können die Abfragezeichenfolge einfach hacken, um die Authentifizierung zu umgehen.
JohnOpincar
1
@ JohnOpincar Das war auch mein Gedanke .. scheint mir nicht sehr sicher zu sein?
Tom Miller
1
Ich habe das Gleiche gedacht. Auf keinen Fall sollte SSO so funktionieren!
user441521
1
Dieser erste Link ist ziemlich rau. Für den Anfang, wo immer er "Echtzeit" sagt, ersetzen Sie es durch "reale Welt". Am Ende impliziert er, dass das magische "IsAuthenticatedBySSO" in der Abfragezeichenfolge durch die Verwendung eines SAML-Tokens ersetzt werden sollte, das in einem Folgeartikel beschrieben worden wäre. Leider (?) Wurde das Konto des Benutzers geschlossen, weil er "missbräuchlich war oder ein Troll ist".
Nick Westgate
14

Ich bin zu spät zur Party, aber für Option 1 würde ich mich für IdentityServer3 (.NET 4.6 oder niedriger) oder IdentityServer4 (kompatibel mit Core ) entscheiden.

Sie können Ihren vorhandenen Benutzerspeicher in Ihrer App wiederverwenden und diesen als Benutzerspeicher von IdentityServer verwenden. Dann müssen die Clients auf Ihren IdentityServer als Open-ID-Anbieter verwiesen werden.

Evdzhan Mustafa
quelle
11

Es gibt mehrere Identitätsanbieter mit sofort einsatzbereitem SSO-Support, auch Produkte von Drittanbietern **.

** Das einzige Problem bei Produkten von Drittanbietern besteht darin, dass sie pro Benutzer / Monat berechnet werden und sehr teuer sein können.

Einige der verfügbaren Tools und mit APIs für .NET sind:

Wenn Sie sich für eine eigene Implementierung entscheiden, können Sie die folgenden Frameworks verwenden, die nach Programmiersprachen kategorisiert sind.

  • C #

    • IdentityServer3 (OAuth / OpenID-Protokolle, OWIN / Katana )
    • IdentityServer4 (OAuth / OpenID-Protokolle, ASP.NET Core )
    • OAuth 2.0 von Okta
  • Javascript

    • passport-openidconnect (node.js)
    • oidc-provider (node.js)
    • openid-client (node.js)
  • Python

    • pyoidc
    • Django OIDC-Anbieter

Ich würde mich für die IdentityServer4- und ASP.NET Core-Anwendung entscheiden, sie ist einfach zu konfigurieren und Sie können auch Ihren eigenen Authentifizierungsanbieter hinzufügen. Es werden OAuth / OpenID- Protokolle verwendet, die neuer als SAML 2.0 und WS-Federation sind.

Alexz
quelle
3

UltimateSAML SSO ist ein OASIS SAML v1.x- und v2.0-kompatibles .NET-Toolkit. Es bietet eine elegante und einfache Möglichkeit, Ihren ASP.NET-, ASP.NET MVC-, ASP.NET Core-, Desktop- und Dienstanwendungen Unterstützung für SAML mit einmaliger Anmeldung und einmaliger Abmeldung hinzuzufügen. Mithilfe der kompakten Bibliothek können Sie SSO-Zugriff auf Cloud- und Intranet-Websites mithilfe eines einzigen Eintrags für Anmeldeinformationen bereitstellen.

Eine ausführliche UltimateSAML SSO-Überprüfung finden Sie hier

Brunoid
quelle
1

[Haftungsausschluss: Ich bin einer der Mitwirkenden]

Wir haben eine sehr einfache kostenlose / OpenSource-Komponente erstellt, die SAML-Unterstützung für ASP.NET-Apps https://github.com/jitbit/AspNetSaml hinzufügt

Grundsätzlich ist es nur eine kurze C # -Datei, die Sie in Ihr Projekt einfügen (oder über Nuget installieren) und mit Ihrer App verwenden können

Alex
quelle