webentwicklung-frage-antwort-db.com.de

ASP.NET-Identität + Windows-Authentifizierung (Mischmodus - Formulare + Windows)

Ich habe mein Bestes getan, um im Internet zu suchen, bevor ich diese Frage gestellt habe. Ich habe ähnliche Fragen zum Stackoverflow gesehen, aber seit langem ist keine zufriedenstellend beantwortet worden. Dies ist ein weiterer Versuch, diese wiederkehrende Frage zu beantworten.

Das Problem

Wie erstelle ich eine ASP.NET MVC 5-Website, die "Windows Auth" für Intranetbenutzer und "Forms Auth" für Internetbenutzer verwendet? Dies möchten wir mit ASP.NET Identity erreichen. Darüber hinaus möchten wir Active Directory-Gruppen nicht für die Autorisierung verwenden. Für Intranetbenutzer möchten wir sie mit Active Directory authentifizieren und dann auf ASP.NET Identity zurückgreifen, um ihre Rollen und anderen Profildaten zu verwalten.

Es ist schön, wenn wir den Endbenutzer nicht auffordern, die Authentifizierungsmethode zu wählen. Die Web-App sollte sich nahtlos in Intranetbenutzer einloggen. Sie sollten nicht einmal wissen, dass es einen Anmeldebildschirm gibt. Ebenso sollten die Internetnutzer nicht aufgefordert werden, ihre Domain-Anmeldeinformationen einzugeben. Sie sollten sofort den formularbasierten Anmeldebildschirm sehen.

Gibt es einen empfohlenen Weg, dies zu lösen? Oder können Sie kommentieren, ob eine der folgenden Lösungen richtig 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/

Dies ist ein 2004er Artikel, der momentan möglicherweise nicht hilfreich ist: https://msdn.Microsoft.com/en-us/library/ms972958.aspx

38
Ravi M Patel

IIS Konfiguration
Aktivieren Sie den Status der anonymen Authentifizierung in IIS für die gesamte Site und die Windows-Authentifizierung für einige Ordner im Stammverzeichnis (z. B./WindowsLogin). In diesem Ordner platzieren Sie die ASPX-Datei (für das WebForms-Projekt) oder erstellen Sie den ApiController (für das MVC-Projekt). 

Site Setup
Fügen Sie auf der Anmeldeseite die Schaltfläche "Mit Windows/ActiveDirectory-Konto anmelden" hinzu (ähnlich wie es üblich ist, Schaltflächen hinzuzufügen. Mit Twitter, Facebook, Gmail usw. anmelden). Wenn der Benutzer diese Schaltfläche drückt, werden sie auf die Seite oder den Controller im Ordner/WindowsLogin umgeleitet, für den eine Windows-Authentifizierung erforderlich ist. Wenn eine Site Single-Sign-On-Funktionen verwendet, suchen Sie sie auf dieser Seite oder diesem Controller. In anderen Fällen speichern Sie Session für Windows-Benutzer dort. Wenn Benutzer auf diese Seite oder diesen Controller zugegriffen haben, wurden sie bereits als Windows-Benutzer authentifiziert.

5
rba

Eine der möglichen Möglichkeiten besteht darin, zwei Sites in IIS zu erstellen, die jedoch den gleichen Zielordner haben, in dem sich die Quellen der Site befinden. Die erste Site ist für interne Benutzer mit aktiviertem Windows-Authentifizierungsmodus und zum Binden an den Port 80, während der zweite Standort für externe Benutzer mit aktiviertem anonymen Modus und zum Binden an den Port 8080 gedacht ist. Anschließend müssen Sie in der Firewall NAT konfigurieren, sodass alle Anforderungen, die aus dem lokalen Netzwerk oder aus dem VPN stammen, an local IIS Server an Port 80 und alle Anforderungen aus dem Internet an Port umgeleitet werden 8080 of IIS Server.

4
rba

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

Behalten Sie Ihre MVC-Site unverändert, führen Sie sie jedoch als Anonymous vs. Windows Auth aus.

Interne Site

Erstellen Sie eine Umleitungs-URL-Site: Richten Sie diese Site als Fensterauthentifizierung ein, damit Sie die Benutzer-ID aus Active Directory abrufen können. Geben Sie Ihren Benutzern diese URL und/oder machen Sie sie zu dem Link, auf den Sie in Ihrem Intranet klicken. Dann ruft diese Site Ihre MVC-Site auf und übergibt die Anmeldeinformationen (Anmelde-ID) des Benutzers. 

ein. Dies kann entweder über eine verschlüsselte Zeichenfolge in der URL oder über einen verschlüsselten Wert in einem Cookie erfolgen. Sie können auch mit einem Verfallsdatum/Zeitwert verschlüsseln.

b. (Von Forms Auth sprechen) Erstellen Sie ein Formularauthentifizierungsticket mit dieser Benutzer-ID. Führen Sie eine andere Anmeldelogik aus. Erledigt.

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

4
Patrick

Ich habe vor einiger Zeit bei meinem vorherigen Job einen Proof of Concept gemacht, daher sind die Details verschwommen und ich habe keinen Code, auf den ich mich beziehen kann ...

Die Anforderungen waren:

  • Einzelne URL für internen (LAN) und externen (Internet) Zugriff
  • Zwei Arten von Benutzern, Personen in der Domäne und externe Benutzer (Nicht-AD)
  • Windows-Authentifizierung für Domänenbenutzer sowohl intern als auch extern
  • Möglichkeit zur Eingabe von Domänenanmeldedaten bei Verwendung von iPads (keine Windows-Authentifizierung)

Die Kernidee der Lösung, die ich mir ausgedacht hatte, war die Verwendung der Active Directory-Gruppenrichtlinie, um einen benutzerdefinierten String zu einem HTTP-Anforderungsheader-Benutzeragenten hinzuzufügen. Der Inhalt spielt dabei keine Rolle.

https://technet.Microsoft.com/de-de/library/cc770379.aspx

Die Landing Page für die Site prüft daraufhin, und wenn gefunden wird, leitet sie in ein virtuelles Verzeichnis um, mit Windows Auth, das ihr AD-Konto überprüft, das ASP.NET-Authentifizierungstoken aufgefüllt und sie anschließend auf ihre Homepage umgeleitet hat.

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-/Kennwortüberprüfung zum normalen Anmeldeformular, sodass ein Domänenbenutzer, der von einem Nicht-Windows-Gerät (iPad) auf die Website zugegriffen hat, seine normalen Anmeldedaten verwenden kann.

1
Bigwave

Möchten Sie Formulare und AD-Authentifizierung über eine URL verwalten? Ich habe Thinktecture (Claims Based Auth) als Rahmen für WIF und für das Marshalling verschiedener Formen der Authentifizierung verwendet. Um jedoch zu umgehen, wenn von einer URL aus eine Logik beim Anmelden verarbeitet werden musste, die den Benutzer mit AD oder auf Formularen basierten. In einem neueren Projekt wurde dies in der Benutzerverwaltung behandelt, als wir das Benutzerkonto erstellt haben (es war AD von Forms Auth zugeordnet). Wenn der Benutzer sich dann anmeldete, wurde der AD-Domänenname als Teil der Anmeldung vorangestellt. Es gibt verschiedene Möglichkeiten, dies umzusetzen, dies war nur eine, die ich verwendet habe. Ein Beispiel: Anstatt die Domäne anzufordern, verwenden Sie einfach den Benutzernamen, suchen Sie nach AD- oder formularbasierten Flags für den Benutzernamen und behandeln Sie die Authentifizierung entsprechend 

EDIT Nur ein Update beim erneuten Lesen Ihrer Frage. Sind Internetbenutzer und Intranetbenutzer gleich? In diesem Fall müssen Sie lediglich die formularbasierte Authentifizierung durchgängig durchführen und die Benutzer in der Produktdatenbank unabhängig von AD verwalten. Wenn sie identisch sind, können Sie sich anmelden, indem Sie den Domänennamen vor dem Benutzernamen eingeben. wenn Sie sich ausschließlich auf AD verlassen wollten.

1
rlcrews

Legen Sie Ihren Website-Code auf dem Server ab, kopieren Sie ihn auf zwei separate Websites und behandeln Sie die Änderungen in der Authentifizierung, indem Sie die Datei web.config konfigurieren. (Eine würde mit anonymer und eine mit Windows-Authentifizierung eingerichtet werden.)

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

0
Lareau