36

Ich habe mein Bestes versucht, im Internet zu suchen, bevor Sie diese Frage stellen. Ich habe ähnliche Fragen zu stackoverflow gesehen, aber keine wurde schon lange zufriedenstellend beantwortet. Dies ist ein weiterer Versuch, diese wiederkehrende Frage beantwortet zu bekommen.ASP.NET Identität + Windows-Authentifizierung (Mix-Modus - Formulare + Windows)

Das Problem

eine ASP.NET MVC-5-Website zu bauen, die "Windows Auth" für Intranet-Benutzer und "Forms Auth" für Internet-Nutzer verwendet? Wir möchten dies mit ASP.NET Identity erreichen. Darüber hinaus möchten wir keine Active Directory-Gruppen für die Autorisierung verwenden. Für Intranet-Benutzer möchten wir sie mit Active Directory authentifizieren und dann auf ASP.NET Identity zurückgreifen, um ihre Rollen und andere Profildaten zu verwalten.

Es wird nett sein, wenn wir den Endbenutzer nicht bitten, die Authentifizierungsmethode zu wählen. Die Web-App sollte Intranet-Benutzer nahtlos anmelden. Sie sollten nicht einmal wissen, dass es einen Anmeldebildschirm gibt. Ebenso sollten die Internetbenutzer nicht aufgefordert werden, ihre Domänenanmeldeinformationen einzugeben. Sie sollten sofort den formularbasierten Anmeldebildschirm sehen.

Gibt es eine empfohlene Lösung? Oder können Sie einen Kommentar abgeben, wenn eine der folgenden Lösungen geeignet ist?

http://world.episerver.com/blogs/Dan-Matthews/Dates/2014/8/Mixing-Forms-and-Windows-Authentication/

https://github.com/MohammadYounes/MVC5-MixedAuth

http://mvolo.com/iis-70-twolevel-authentication-with-forms-authentication-and-windows-authentication/

FYI Dies ist 2004 Artikel, jetzt nicht hilfreich sein können: https://msdn.microsoft.com/en-us/library/ms972958.aspx

+0

Haben Sie es am Ende geschafft? Ich bin auf der Suche nach einer ähnlichen Lösung, aber mit zusätzlicher Komplexität der Bereitstellung von Lösung zusammen mit Active Directory für Azure zu –

+0

Ravi, haben Sie die Lösung kommen, wenn ja bitte teilen Sie die Lösung mit uns. – Aji

+0

Noch nicht, wird gepostet, wenn ich es tue. –

Antwort

4

Einer der möglichen Wege werden könnten zwei Standorten in IIS erstellen, aber mit demselben Zielordner, in dem sich die Quellen der Site befinden. Die erste Site ist für interne Benutzer mit aktiviertem Windows-Authentifizierungsmodus und Bindung an Port 80, während die zweite Site für externe Benutzer mit aktiviertem anonymen Modus und zum Binden an Port 8080 vorgesehen ist. Dann müssen Sie bei der Firewall NAT so konfigurieren, dass alle Anfragen, die von einem lokalen Netzwerk oder VPN kommen, an den lokalen IIS-Server auf Port 80 umgeleitet werden und alle Anfragen aus dem Internet an Port 8080 des IIS-Servers weitergeleitet werden.

+0

Ich denke, es wird helfen. Es wird jedoch auch zusätzlichen Aufwand für die Wartung einer anderen Site verursachen. Es wird auch die URL der Site ändern. Irgendeine Idee, wie Sie Windows Auth mit einer Rolle verbinden würden, die mit der Identität von asp.net definiert und in einer Datenbank gespeichert ist? –

+0

Keine zusätzlichen Bemühungen um die Website zu erhalten. Sie erstellen einfach zwei Links in IIS, die auf dieselbe Site auf der Festplatte verweisen. Und die URL wird eins sein: das gesamte lokale Netzwerk ist hinter der Firewall und nur die Firewall hat eine externe IP-Adresse, an die die Domäne gebunden ist. Die Domain (URL) bleibt also für alle Benutzer gleich, die gesamte Logik ist hinter der Firewall versteckt. – rba

+1

Aber dann können Sie nicht als externer, nicht AD-Benutzer aus dem LAN anmelden? – Bigwave

1

Möchten Sie Formulare und AD-Authentifizierung von einer URL aus behandeln? Ich habe Thinktecture (Claims Based Auth) als Framework für WIF und Marshaling verschiedener Formen der Authentifizierung verwendet. Jedoch, um zu handhaben, wenn von einer URL ich einige Logik bei der Anmeldung behandeln musste, die den Benutzer mit AD oder Forms verbunden hat. In einem neueren Projekt wurde dies bei der Benutzerverwaltung gehandhabt, als wir das Benutzerkonto erstellten (es war mit AD of Forms Auth verbunden). Wenn sich der Benutzer dann anmeldete, würden sie den AD-Domänennamen als Teil der Anmeldung voranstellen. Es gibt eine Reihe von Möglichkeiten, dies zu implementieren, das war nur eines, das ich verwendet habe. Ein Beispiel, anstatt die Domäne erforderlich, nur den Benutzernamen verwenden, dann überprüfen Sie für AD oder formularbasierte Flaggen auf dem Benutzernamen und dann Authentifizierung behandeln Ihre Frage entsprechend

EDIT gerade ein Update in Re-Lektüre. Sind Internetbenutzer und Intranetbenutzer gleich? Wenn dies der Fall ist, müssen Sie nur formularbasierte Authentifizierung auf der ganzen Linie ausführen und die Benutzer in der Produktdatenbank unabhängig von AD verwalten. Wenn sie identisch sind, könnten sie sich anmelden, indem sie den Domänennamen dem Benutzernamen voranstellen. wenn Sie sich ausschließlich auf AD verlassen wollten.

+1

Nein, Intranet und Internetbenutzer sind VERSCHIEDENE. Wir möchten Windows-Authentifizierung für Intranet-Benutzer verwenden, da sie alle über Firmen-Laptops \ PCs auf die Website zugreifen. Wir wissen bereits, wer sie sind, da sie sich mit ihrem Windows-Konto bei ihren Computern angemeldet haben. Dann wäre es nicht sinnvoll, sie zu bitten, sich noch einmal einzuloggen. Daher Windows Auth. Internet-Benutzer sind externe Anbieter usw., daher müssen sie ihren Benutzernamen und ihr Passwort angeben, um sich anzumelden. –

4

Der Begriff dafür ist Mixed-Mode-Authentifizierung. Ich habe das schon mehrmals gemacht. Sie müssen nur Ihre Hauptseite optimieren. Hier ist, wie ich es gemacht habe.

Halten Sie Ihre Main MVC-Site unverändert, aber führen Sie sie als Anonym vs. unter Windows Auth.

Interne Website

erstellen Redirect URL der Website:-Setup diese Website als Fenster Auth so können Sie den Benutzer-ID aus dem Active Directory ziehen. Geben Sie Ihren Nutzern diese URL und/oder machen Sie sie zum Link, auf den sie in Ihrem Intranet klicken. Dann ruft diese Site Ihre MVC-Site auf und übergibt die Benutzeranmeldeinformationen (Login-ID).

a. Dies kann entweder über eine verschlüsselte Zeichenfolge auf der URL oder einen verschlüsselten Wert in einem Cookie erfolgen. Sie können auch mit einem Ablaufdatum/-zeitwert verschlüsseln.

b. (Sprechen von Forms Auth) Erstellen Sie ein Formularauthentifizierungsticket mit dieser Benutzer-ID. Führen Sie jede andere Login-Logik aus, die Sie haben. Erledigt.

Externe Seite - Keine Änderungen erforderlich. Lassen Sie die Benutzer sich anmelden, wie sie sind.

+0

Aber dann haben Sie zwei URLs? Dann müssen sich weniger technisch versierte Benutzer, die nur manchmal im Büro sind, zwei URLs merken und wann sie verwenden? – Bigwave

+0

Ja, zwei URLs, aber wenn man sich auch die Microsoft-Dokumentation ansieht, wie man eine Website mit Windows Auth und Anonym arbeiten lässt, zeigen sie, wie man es macht, raten aber aus Sicherheitsgründen davon ab. Hast du ein Intranet? Setzen Sie den Link dort. –

+1

@Bigwave gibt es mehrere Möglichkeiten, wie Sie diesen Vorschlag ohne mehrere URLs erreichen können. Sie könnten Ihr DNS so konfigurieren, dass Intranet-Benutzern eine interne IP-Adresse zugewiesen wird. www.example.com verweist auf 10.x.x.x im Intranet, aber auf Ihre öffentliche IP-Adresse. Richten Sie dann die kleine Windows-Auth-App als Unter-Site unter derselben URL ein und leiten Sie für interne Benutzer anonyme Benutzer dorthin um. Oder wenn Sie einen Load Balancer verwenden, fügen Sie einen speziellen Header "X-Forwarded-For" für externe Benutzer hinzu und suchen Sie danach. Vielleicht nicht die sauberste Lösung, aber mit ein wenig Arbeit könnte man es so nahtlos wie möglich machen. –

0

Warum legen Sie Ihren Website-Code nicht auf den Server, kopieren Sie ihn auf zwei separate Websites und behandeln Sie nur die Änderungen der Authentifizierung, indem Sie die Datei web.config konfigurieren. (Eine würde mit anonymen und eine mit Windows-Authentifizierung eingerichtet werden.)

Es ist nicht so pfiffig wie andere Methoden, aber es ist relativ schmerzlos. Es gibt zwei Seiten, aber der Inhalt (außer web.config) ist identisch.

1

ich ein Proof of Concept dies vor einiger Zeit tat, bei meinem vorherigen Job, so dass die Details sind verschwommen, und ich habe keinen Code zu beziehen ...

Die Anforderungen waren:

  • Einzel URL für internes (LAN) und externen (Internet) Zugang
  • Zwei Arten von Benutzern, die Menschen auf der Domäne und externen (nicht-AD) Benutzer
  • Windows-Authentifizierung für Benutzer Domäne sowohl intern als auch extern
  • Die Fähigkeit Domain Anmeldedaten eingeben, wenn iPads (kein Fenster Auth)

Die Kernidee in der Lösung kam ich mit war, dass wir Active Directory-Gruppenrichtlinien verwendet, um eine benutzerdefinierte Zeichenfolge in dem HTTP-Request-Headers Benutzer-Agent, der Inhalt spielt keine Rolle, tatsächlich haben wir eine lange zufällige Zeichenfolge verwendet.

https://technet.microsoft.com/en-us/library/cc770379.aspx

Dann wird die Zielseite für die Website überprüft diese, und wenn Umleitungen auf ein virtuelles Verzeichnis gefunden, mit Fenstern Auth, die ihre AD-Konto überprüft, die ASP.NET-Authentifizierungstoken bevölkert und dann umgeleitet sie auf ihrer Homepage.

Wenn der benutzerdefinierte Header nicht vorhanden ist, wird nur das normale Anmeldeformular angezeigt. Die einzige andere Sache war das Hinzufügen einer AD-E-Mail/Passwort-Prüfung zum normalen Login-Formular. Wenn ein Domain-Benutzer die Site von einem Nicht-Windows-Gerät (iPad) aus anwendete, konnten sie ihre normalen Login-Daten verwenden.

5

IIS-Konfiguration
Aktivieren der anonymen Authentifizierungsstatus in IIS für den gesamten Standort und die Windows-Authentifizierung für einige Ordner unter Stammverzeichnis (zB/Windows). In diesem Ordner platzieren Sie die aspx-Datei (für das WebForms-Projekt) oder erstellen Sie ApiController (für das MVC-Projekt).

Aufstellungsorteinstellung
auf Login-Seite Schaltfläche „Login with Windows/ActiveDirectory- Konto“ add (in ähnlicher Weise, wie es üblich ist, mit Twitter, Facebook, Gmail, etc. zu addieren Tasten Login). Wenn Benutzer diese Schaltfläche drücken, werden sie zu der Seite oder dem Controller im Ordner/WindowsLogin umgeleitet, für die eine Windows-Authentifizierung erforderlich ist. Wenn die Site eine Single Sign-On-Funktionalität verwendet, suchen Sie sie auf dieser Seite oder auf dem Controller. Speichern Sie in einem anderen Fall einfach Session for Windows-Benutzer dort. Wenn Benutzer auf diese Seite oder diesen Controller zugegriffen haben, wurden sie bereits als Windows-Benutzer authentifiziert.