2010-02-12 14 views
46

Ich habe eine Intranetanwendung (ASP.NET 3.5), die entwickelt wurde, um Formularauthentifizierung (zusammen mit dem standardmäßigen Aspnet-Mitgliedschaftssystem) zu verwenden. Ich speichere auch zusätzliche Informationen über Benutzer in einer anderen Tabelle, die ihren Primärschlüssel mit der Tabelle aspnet_users teilt.Mischen von Formularauthentifizierung mit Windows-Authentifizierung

Für Benutzer, die Teil unserer Domäne sind, speichere ich ihren Domänenkontonamen in der Sekundärnutzertabelle und möchte Benutzer automatisch anmelden, deren Domänenkontoname mit einem in der Tabelle gespeicherten Namen übereinstimmt.

Ich habe die verfügbaren Handbücher gelesen - sie stammen alle aus zwei Jahren oder mehr und gehen davon aus, dass Sie die Windows-Authentifizierung auf einer separaten Anmeldeseite aktivieren können, mit der Sie den Domänenkontonamen extrahieren können. Soweit ich das beurteilen kann, ist dies in IIS7 nicht möglich (die gesamte Authentifizierungsmethode wird auf allen Seiten angewendet und kann nicht selektiv deaktiviert werden, und beide Authentifizierungsmethoden können nicht auf derselben Seite angewendet werden).

Gibt es eine Möglichkeit, IIS durch den Windows-Domäne-Kontoname des anfordernden Benutzers zu übergeben? Ich brauche keine korrekte AD-Authentifizierung, nur den Domain-Namen.

Antwort

45

Eigentlich können Sie es tun. Etwas zu spät für @dr_draik, aber das ergab sich in einem Google-Ergebnis für mich, also dachte ich, ich würde etwas Wissen teilen.

Wenn Sie im klassischen Modus sind - Aktivieren Sie Windows und Forms Auth. Sie erhalten eine Warnung, dass Sie beides nicht gleichzeitig tun können, aber Sie können ignore it. Dann können Sie rund um die verschiedenen Eigenschaften wie -Code spelunk:

HttpContext.Current.Request.ServerVariables["LOGON_USER"]

und den Benutzernamen fischen dort.

Wenn Sie im integrierten Modus sind - 4021905 IIS7 Challenge-based and login redirect-based authentication cannot be used simultaneiously führt zu IIS 7.0 Two-Level Authentication with Forms Authentication and Windows Authentication das ist ein Modul, mit dem Sie selektiv die Auth für verschiedene Seiten ändern können.

+0

Sehr interessant - vielen Dank für das Hinzufügen hier, da ich glaube, dass es viele Suchtreffer zu diesem Thema gibt. –

+0

Switching akzeptiert Antwort, da diese Frage offensichtlich einige Treffer bekommt, und es wird auf diese Weise klarer. –

+0

Süß, ta! Ich hoffe es hilft den zukünftigen Googlern –

0

Ich habe etwas, was Sie versuchen können - nicht sicher, ob es funktioniert.

In der Vergangenheit haben wir Request.ServerVariables ["LOGON_USER"] verwendet, aber offensichtlich, um einen nicht leeren Wert zurückzugeben, müssen Sie den anonymen Zugriff deaktivieren.

diesem Artikel: http://support.microsoft.com/default.aspx/kb/306359

Er schlägt vor, halten den anonymen Zugriff auf die IIS-Seite und Formularauthentifizierung, aber den anonymen Benutzer zu leugnen, wie folgt:

<authorization> <deny users = "?" /> <!-- This denies access to the Anonymous user --> <allow users ="*" /> <!-- This allows access to all users --> </authorization>

Nicht sicher, ob dies funktionieren wird aber einen Versuch wert.

-Krip

+1

Danke - hat es versucht, aber es ist immer noch eine leere Zeichenfolge auch mit den Einstellungen wie empfohlen. Ich habe den Artikel überprüft und es gilt leider nicht für IIS7. –

0

Leider was Sie versuchen, genau das zu tun, wird nicht unterstützt. Damit ASP.NET den Windows-Benutzernamen kennt, müssen Sie die Windows-Authentifizierung verwenden.

Sie könnten eine andere Site/ein anderes virtuelles Verzeichnis einrichten, das die Benutzernameninformationen an eine andere Seite weitergeleitet hat. Was passiert jedoch, wenn sich nicht von Windows authentifizierte Benutzer anmelden?

+1

Danke, die zwei Anwendungslösung scheint am praktikabelsten, aber ich denke, wir müssen nur mit Formen Auth gehen. Es fühlt sich ziemlich plump an, eine separate App nur für den Login zu haben. –

4

Sie könnten immer 2 separate Anwendung in IIS7 einrichten. Eine würde Windows-Authentifizierung aktiviert haben. Die andere wäre die Hauptanwendung mit Formularauthentifizierung. Wenn ein Benutzer zur Windows-Authentifizierungsanwendung weitergeleitet wird, kann die Seite ihre Anmeldeinformationen abrufen und an die Formularauthentifizierungsanwendung übergeben.

+1

Danke, die zwei Anwendungslösung scheint die praktikabelste, aber ich denke, wir müssen nur mit Formen Auth gehen. Es fühlt sich ziemlich plump an, eine separate App nur für den Login zu haben. –

4

(Mehr für die Vollständigkeit der Informationen wirklich)

fragte ich einen Sicherheitsmann .Net diese Frage auf einer Konferenz eine Weile zurück. Seine Antwort war, dass es technisch möglich ist, aber er hatte es nie getan gesehen (und ihn wissen lassen, wenn ich es getan habe und es funktionierte!).

Er schlug vor, wie es gemacht werden könnte, indem Sie Ihren eigenen ISAPI-Filter erstellen und in IIS installieren. Der ISAPI-Filter würde die Anforderungen abfangen und im Grunde den Job ausführen, den IIS bei der Verwendung der integrierten Authentifizierung ausführt, greift jedoch auf Formulare zurück, wenn diese nicht vorhanden sind. Dies beinhaltete eine komplizierte Herausforderungs-/Antwortlogik in dem Filter.Dies war jedoch für IIS6, daher könnte es in IIS7 anders sein.

Während dies könnte technisch möglich sein, würde ich diesen Weg nicht vorschlagen da es wie ein bisschen wie ein Hack fühlt, und Ihre eigene Sicherheit nie wirklich eine gute Idee ist, rollen (es sei denn, Sie wirklich wissen, was Sie sind dabei).

+1

Danke für die Eingabe - es ist ein bisschen nervig, dass das nicht mehr möglich ist (oder praktisch nicht mehr möglich ist), aber ich nehme an, es ist der Preis des Fortschritts. –

+0

Danke für das Teilen dieser Info! Ich stimme dem zu, was Sie gesagt haben, um unsere eigene Sicherheitsfunktion nicht zu rollen, es sei denn, wir sind ziemlich sicher –

1

Es gibt viele Artikel zum Mischen der Authentifizierung, indem Sie config so einstellen, dass die Formulare mit anonymem Zugriff auf die App verwendet werden. Zweitens sollte eine Seite für die integrierte Authentifizierung erstellt werden, wobei die IIS-Einstellungen so eingestellt sind, dass sie anonym bleiben und die integrierte Authentifizierung verwenden. Dort würden Sie den magischen Trick, indem Sie die "Logon_User" Variable der requets ServerVariables Sammlung überprüfen. Und schließlich für die integrierte Authentifizierung, um den Benutzer automatisch anzulegen, muss er einen kurzen gehosteten Namen haben. Wenn Ihre Formularauthentifizierung über FQDN mit dem Internet verbunden ist, sollte eine Art Redirect auf die kurze Hostseite erfolgen. Ich denke, es ist möglich, mit nur einer Anwendung unter IIS mit 2 virtuellen Verzeichnissen zu erreichen.

+1

, soweit ich weiß, funktioniert diese Lösung auf IIS6, aber nicht in IIS7.Das liegt daran, dass Sie in IIS6 den Authentifizierungsmodus pro Ordner (sogar pro Datei) zuweisen können, während auf IIS7 die Authentifizierungseinstellungen für die gesamte Anwendung global sind. – pomarc

1

Ich fand eine Lösung ohne spezielle Add-ons. Es war schwierig und bestand darin, Elemente aus allen Seiten, auf die hier verwiesen wird, miteinander zu kombinieren. Ich habe darüber geschrieben: http://low-bandwidth.blogspot.com.au/2014/11/iis7-mixed-windows-and-forms.html

Im Wesentlichen müssen Formulare, Windows und Anon-Authentifizierung aktiviert werden. Der Anmeldebildschirm sollte formularbasiert sein und eine Schaltfläche zum Auslösen der Windows-Anmeldung enthalten, die eine HTTP 401-Antwort herausfordert, die bei erfolgreicher Erstellung ein formularbasiertes Anmeldeticket erstellt.

Die Probleme sind ziemlich komplex, und die Post geht durch die Prinzipien und die Lösung im Detail.

Verwandte Themen